将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目依赖关系的解耦。从而提高项目的扩展和维护性。
一、简单工厂模式
定义了一个创建对象的类,由这个类来封装实例化对象的行为代码。
由一个工厂对象决定创建出哪一种产品类的实例。
- 披萨项目需求:便于披萨种类的扩展,便于维护
- 披萨的种类很多 比如 GreekPizza、CheesePizza、PepperPizza等
- 披萨的制作有 prepare(准备),bake(烘烤), cut(切片), box(打包)
- 完成披萨店订购功能。
方案:把创建Pizza的对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该类即可,其它有创建Pizza对象的代码就不需要修改了。
二、工厂方法模式:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
工厂方法模式将对象的实例化推迟到子类。
抽象产品类Product:定义产品的共性,实现对事务最抽象的定义
抽象工厂Creator:具体如何创建产品类是由工厂实现类ConcreteCreator完成。
- 披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨。
- 比如:北京的CheesePizza、北京的PepperPizza等或者是伦敦的CheesePizza、伦敦的PepperPizza等
方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。
三、抽象工厂模式
为创建一组相关或相互依赖的对象提供一种接口,而且无需指定他们的具体类
四、JDK中的Calendar类使用了简单工厂方法模式