上篇文章讲到了对工厂方法模式进行变化后带来的缺陷,而为了解决工厂方法模式所带来的缺陷,从而引出了抽象工厂模式。
在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性。一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、电冰箱、空调等多种电器,而不是只生产某一种电器。为了更好地理解抽象工厂模式,先引入两个概念:
- 产品等级:就好比一个抽象类是手机,其子类有苹果、小米、华为,而抽象类手机与具体品牌的手机之间就构成了一个产品等级结构
- 产品簇:产品簇是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如苹果工厂生产的苹果手机、苹果电脑,苹果手机位于手机产品等级结构中,苹果电脑位于电脑产品等级结构中,苹果手机和苹果电脑就构成了一个产品簇
三、抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂来创建其他工厂,该超级工厂又称为其他工厂的工厂。它提供了一种创建对象的最佳方式
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象
抽象工厂模式可以理解为将简单工厂模式和工厂方法模式进行整合。从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)
简单理解:工厂方法模式的工厂是产品等级工厂,因为它们只创建产品等级。就好比手机工厂它只负责创建手机。而在抽象工厂模式中的工厂则是产品簇工厂,它们负责创建产品簇,就好比苹果工厂,它会创建手机、电脑等
interface Food {
void production();
}
class HanBao implements Food {
@Override
public