工厂模式
文档地址:《设计模式之禅》
第八章:工厂模式(Factory Pattern)
切入故事:女娲造人的故事
定义: Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口, 让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。 )
通用类图:
优点:
1: 良好的封装性, 代码结构清晰。
2: 工厂方法模式的扩展性非常优秀。
3: 屏蔽产品类。(如JDBC)
4: 工厂方法模式是典型的解耦框架。
使用场景:
1: 工厂方法模式是new一个对象的替代品, 所以在所有需要生成对象的地方都可以使用, 但是需要慎重地考虑是否要增加一个工厂类进行管理, 增加代码的复杂度。
2: 需要灵活的、 可扩展的框架时, 可以考虑采用工厂方法模式。
3: 工厂方法模式可以用在异构项目中。
4: 可以使用在测试驱动开发的框架下。(目前比较少见)
扩展:
1:简单工厂(又称静态工厂)
2:多工厂类
3:替代单例模式
4:延迟初始化
个人总结:调用者完全不需要知道对象是怎么生成的,只要找到对应的factory接口,然后,给出想要的对象的名称,就可以生成一个需要的对象。
第九章:抽象工厂 (Abstract Factory Pattern)
切入故事:女娲的失误
定义: Provide an interface for creating families of related or dependent objects without specifyingtheir concrete classes.(为创建一组相关或相互依赖的对象提供一个接口, 而且无须指定它们的具体类。 )
通用类图:
优点:
1: 封装性。
2: 产品族内的约束为非公开状态。
缺点: 产品族扩展非常困难。
应用场景: 一个对象族(或是一组没有任何关系的对象)都有相同的约束, 则可以使用抽象工厂模式。
个人总结:需要的某种对象,可以找到某对象的抽象Factory,就可以生成一个需要的对象,而且,可以对对象的某些属性和方法提出具体的要求,弊端是,会生成大量的抽象factory.