抽象工厂模式
产品等级和产品族
我现在对抽象工厂模式的理解就是工厂方法模式的扩展:之前的工厂方法模式的工厂方法只有一个,可以扩展成多个工厂方法,从而减少了工厂类的数量。
然而什么场景下工厂抽象类能具有多个相同的工厂方法呢?在此,首先介绍一下产品等级和产品族的概念。如下图,比如四个工厂都生产正方形、圆形和椭圆形,那么正方形、圆形和椭圆形就是一个产品族;各个工厂的单个产品,比如椭圆,就是一个产品等级。
抽象工厂方法最早的应用是用来创建在不同操作系统下都能够运行的系统,比如在Windows与Linux操作系统下都有图形环境的构件。在每一个操作系统中,都有一个图形构件组成的构件家族(比如Button、Text等),可以通过一个抽象角色给出功能定义,而由具体子类给出不同操作系统下的具体实现。
抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
抽象工厂模式结构如下图所示:
可以发现抽象工厂模式的抽象工厂的工厂方法为创建一个产品族的产品,一个具体的工厂类负责创建某一具体产品族的产品。
同时也能发现抽象工厂“开闭原则”的倾斜性:如果需要扩展一个新的产品族,那么抽象工厂模式能很好的支持“开闭原则”,只需要增新一个具体工厂类;但是如果需要添加一个产品等级,那么所有的工厂类都需要修改,不能很好的支持“开闭原则”。
总结和思考
在学习了简单工厂模式、工厂方法模式和抽象工厂模式之后,记录一些自己的思考和想法:
1. 工厂模式字面意思是工厂生产产品,思考问题的时候应该也可以衍生出各种不同的含义,比如提供各种不同的服务。
2. 简单工厂模式适合产品少的情况,一个工厂负责所有产品的创建。
3. 工厂方法模式是对简单工厂模式的改进,一个工厂负责一个产品的创建。
4. 抽象工厂是工厂方法模式的一种扩展和改进,需要提取相同的工厂方法。