前言
文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。
正文
一、定义
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
在这模式中,提出了产品等级结构(即一类产品的层级结构,比如电视机抽象类-海尔电视机、,空调抽象类-海尔空调具体类)和产品族(一个品牌或者说工厂下的所有产品集合)的概念,在存在多个产品等级结构的情况下(回想我们的工厂方法模式里面,其实我们只假设了所有的工厂品牌都只生产电视机,但其实他们不止电视机,可能还生产冰箱、空调等等),如果单是用工厂方法模式而显得非常庞大,这时候就要引入抽象工厂模式。
二、情景假设
某一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景。
在看代码前我们可以自己脑补你会怎么编写?这时候我们突然想起来刚学的工厂方法模式,电视、空调等电器先来个抽象类,然后来个实现类。工厂就建成海尔电视机工厂、海尔空调工厂、TCL电视机工厂、TCL空调工厂,然后再关联一下ok。
好了这个时候我相信你已经发现了问题了,是不是某些地方特别冗余(手动狗头)。没关系,这个事情后面再说,接下来核对自己的想法叭。
三、情景分析
关于上面情景的类图(具体分析在下面)
首先应该会有个电视Television类和空调AirConditioner类,因为我们最后就是要生产出电视给客户。(别看着类图头晕,我们先搞定我们的产品类,相当于类图右半边)
//抽象类Television
public interface Television
{
public void play();
}
//具体实现类
//HaierTelevision
public class HaierTelevision implements Television
{
public void play() {
System.out.println("海尔电视机播放中!");
}
}
//HisenseTelevision
public class HisenseTelevision implements Television
{
public void play() {
System.out.println("海信电视机播放中!");
}
}
//抽象类AirConditioner
public