创建型模式----工厂模式and抽象工厂模式
工厂模式
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
步骤:
- 创建一个接口(形状shape);
- 创建实现接口的实现类(各种形状)。
- 创建一个工厂,生成基于给定信息的实体类的对象。(用一个方法来判断使用哪一个实现类)
- 使用该工厂,通过传递类型信息来获取实体类的对象(实例化步骤三的方法)。
抽象工厂模式
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。
步骤:
- 为形状创建一个接口(Shape )。
- 创建(形状)实现接口的实体类(Rectangle 、Square、Circle)。
- 为颜色创建一个接口(Color )。
- 创建(颜色)实现接口的实体类(Red 、Green 、Blue )。
- 为 Color 和 Shape 对象创建抽象类来获取工厂。
- 创建扩展了 AbstractFactory 的工厂类,基于给定的信息生成实体类的对象(ShapeFactory 、ColorFactory )。
- 创建一个工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂(FactoryProducer )。
- 使用 FactoryProducer 来获取 AbstractFactory,通过传递类型信息来获取实体类的对象(AbstractFactoryPatternDemo )。