设计模式之抽象工厂模式

在古代的时候,人们身上穿的衣服其实是人们自己使用织布机织的,随着社会的发展,一直到了现代社会,我们身上穿的衣服基本上都是在工厂里面做好了,直接拿到市面上去卖就好了,对于我们身上的衣服而言,由一开始的手工制作再到今天的工厂生产,这就是工厂模式。

一、认识抽象工厂模式

工厂模式主要分为三个:

(1)简单工厂模式:我们的衣服在工厂里面去建造,这就是简单工厂模式

(2)工厂方法模式:随着社会的发展,用户现在想要一身黑色的衣服、也想要一身红色的衣服。于是乎,我们开始定义一个总厂,下面有很多具体的工厂来生产不同颜色的衣服。

(3)抽象工厂模式:随着客户的要求越来越高,不同颜色衣服还要带各种不同的鞋子去搭配。于是这个工厂又开始生产衣服又要去生产鞋子。

今天我们将继续依照上一篇文章《工厂模式》来探讨一下抽象工厂模式,其实从上面的例子也可以看出,抽象工厂模式其实是工厂模式的升级。下面就来好好看一下抽象工厂模式的实现;

二、抽象工厂模式实现

对于抽象工厂模式,我们还是根据一张图来详细的分析一下

在这里插入图片描述

从上图我们可以看到,抽象工厂模式一共至少有5个角色:

(1)用户:提需求

(2)工厂接口:定义多个方法,比如可以生产鞋子,可以生产衣服的方法

(3)具体工厂:对工厂接口的实现,我们在里面生产指定的产品,比如红色衣服工厂,不仅可以生产红色衣服,还可以生产红鞋子、黑色鞋子

(4)抽象产品接口:比如这里的衣服还有鞋子

(5)具体产品类:具体的产品类。

如果上面的图你觉得还不足以刻画,那么直接来看代码:

第一步:抽象产品类定义

//首先是衣服产品
public abstract class ClothProduct {
	public ClothProduct() {}
}
//下面是鞋子产品
public abstract class ShoeProduct {
	public ShoeProduct() {};
}

第二步:具体产品类定义

首先是具体的衣服产品:红衣服和黑衣服

//红衣服
public class RedClothProduct extends ClothProduct{
	public RedClothProduct() {
		System.out.println("生产红色衣服");
	}
}
//黑衣服
public class BlackClothProduct extends ClothProduct {
	public BlackClothProduct() {
		System.out.println("生产黑色衣服");
	}
}

然后是具体的鞋子产品:红鞋子和黑鞋子

//红鞋子
public class RedShoeProduct extends ShoeProduct {
	public RedShoeProduct(){  
        System.out.println("制造--红鞋子");  
    } 
}
//黑鞋子
public class BlackShoeProduct extends ShoeProduct {
	public BlackShoeProduct(){  
        System.out.println("制造--黑鞋子");  
    } 
}

第三步:工厂接口定义

public interface AbstractFactory {
	//制造衣服
    public ClothProduct createClothProduct();
    //制造鞋子
    public ShoeProduct createShoeProduct(String shoeType);
}

第四步:具体工厂定义

首先是红色衣服工厂:可以生产红衣服还有各种颜色的鞋子

public class RedClothFactory implements AbstractFactory{
	//生产红鞋子
	@Override
	public ClothProduct createClothProduct() {	
		return new RedClothProduct();
	}
	//根据不同的类型生产不同的鞋子
	@Override
	public ShoeProduct createShoeProduct(String shoeType) {
		switch (shoeType) {
		case "red":
			return new RedShoeProduct();
		case "black":
			return new BlackShoeProduct();
		default:
			break;
		}
		return null;
	}
}

其次是黑色衣服工厂:可以生产黑衣服还有各种颜色的鞋子

public class BlackClothFactory implements AbstractFactory{
	//生产黑鞋子
	@Override
	public ClothProduct createClothProduct() {	
		return new BlackClothProduct();
	}
	//根据不同的类型生产不同的鞋子
	@Override
	public ShoeProduct createShoeProduct(String shoeType) {
		switch (shoeType) {
		case "red":
			return new RedShoeProduct();
		case "black":
			return new BlackShoeProduct();
		default:
			break;
		}
		return null;
	}
}

第五步:用户类

public class User {
	public static void main(String[] args){  
		//生产红衣服系列
		RedClothFactory redfactory=new RedClothFactory();
		redfactory.createClothProduct();
		redfactory.createShoeProduct("red");
		//redfactory.createShoeProduct("black");
		
		//生产黑衣服系列
		BlackClothFactory blackfactory=new BlackClothFactory();
		blackfactory.createClothProduct();
		blackfactory.createShoeProduct("red");
		//blackfactory.createShoeProduct("black");
	}
}

关于抽象工厂模式与工厂方法模式的区别,这里就不说了,感觉多看几遍例子就能理解。

三、总结

根据前面写的两篇文章,我们可能会发现无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,目的都是为了代码的解耦。在使用时,只需要关心降低耦合度的目的是否达到了。

谢谢大家关注,如有问题还请批评指正。

欢迎关注我的微信公众号:java的架构师技术栈。回复指定关键字可获取计算机各种视频教程(包含java全套系列、python、神经网络、Android、微信小程序等等教程)

法模式,还是抽象工厂模式,他们都属于工厂模式,目的都是为了代码的解耦。在使用时,只需要关心降低耦合度的目的是否达到了。

谢谢大家关注,如有问题还请批评指正。

欢迎关注我的微信公众号:java的架构师技术栈。回复指定关键字可获取计算机各种视频教程(包含java全套系列、python、神经网络、Android、微信小程序等等教程)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值