一.定义
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。
二.类图
三.优点
- 良好的封装性,每个产品的实现类无需高层模块关心,高层模块只需要关心接口就可以了。
- 产品组内的约束为非公开状态。
四.缺点
产品组扩展困难。产品组扩展需要修改抽象接口AbstractProduct,会引起其他接口的修改。
五.使用场景
一个对象组(或是一组没有任何关系的对象)都有相同的约束,则可以使用持续i昂工厂模式。例如一个文本编辑器和图片处理器,都是软件实体,但是Linux下的文本编辑器和Windows下的文本编辑器虽然功能和界面相同,但是代码实现是不同的,图片处理器也有类似的情况。这就具有了共同的约束条件:操作系统类型。于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。
六.注意事项
产品组扩展困难,但产品等级是非常容易扩展的,增加一个产品等级,只要增加一个工厂类负责新增加出来的产品生产任务即可。也就是说横向扩展容易,纵向扩展困难。