《设计模式之禅》学习笔记(九)
第9章 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern):
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,并且无需指定它们的具体类。)
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
产品族(产品线):功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族,叫做相图。对于每一个产品族,都有一个具体工厂,或者在抽象工厂类中就有一个对应的创建方法。比如女娲造人中的人种(黄种人、白种人、黑种人)。
产品等级结构:一种产品内部的不同等级。比如女娲造人中的性别(男、女)。
区别:由产品族区分出来不同类型的产品。产品等级结构只是产品内部的区别,不能用来区分不同的产品。
抽象工厂模式的优点:
封装性,每个产品的实现类不是高层模块要关心的。只要知道对应的工厂类是谁,就能创建出想要的对象。
产品族内的约束为非公开状态。例如生产男女的比例。
抽象工厂模式的缺点:
最大的缺点就是产品族扩展非常困难,不符合开闭原则。
抽象工厂模式的使用场景:
当一个对象族都有相同的约束,则可以使用抽象工厂模式。
抽象工厂模式的注意事项:
抽象工厂模式扩展产品族非常困难,但很容易扩展产品等级结构。