06 Factory Method工厂方法(创建型)

06 Factory Method(创建型)

 

 

    • 当您使用new时,您肯定是在实例化一个具体的类,所以这肯定是一个实现,而不是接口。
    • 06 Factory Method工厂方法(创建型)_第1张图片
    • 在05策略上,我们学习了一个设计原则:

区分哪些变化与哪些保持不变。把变化的东西“封装”起来。

    • 满足的原则:
      • 变化封装原则
      • 开放封闭原则
      • 依赖倒置原则

要依赖抽象,不要依赖具体类。用依赖倒置原则设计的系统,使得对象的实现从使用中解耦,具有很好的可扩展可维护可理解性

 

依赖抽象而不是具体,使用(客户)和实现(具体类)松耦合

 

    • 动机:创建一个接口,这个接口用于创建对象,而不是让客户来创建
    • 也叫 虚拟构造器
    • 什么时候使用:
      • 具体的产品细节不应该暴露给客户
      • 创建者不能决定他必须创造的具体产品
      • 创建者希望其子类指定其创建的产品。
      • 创建者将创建实例的责任委托给几个子类之一。

 

    • 优点:
      • 通过将所有创建代码(new)放在一个对象或方法中,避免代码重复,并提供一个执行维护的位置,实现把new去掉
      • 客户机只依赖于接口,而不是实例化对象所需的具体类。——编程到一个接口,而不是实现。
    • 缺点:
      • 客户可能不得不子类化
      • 创建类只是为了创建一个特定的ConcreteProduct对象。
    • 实现:
      • creater可以是抽象或者具体的
      • 参数化的工厂方法
        • 工厂方法通过使用标识要创建的对象类型的参数来创建多种产品。
        • 06 Factory Method工厂方法(创建型)_第2张图片

 

    • 变形:
      • 简单工厂模式
        • 06 Factory Method工厂方法(创建型)_第3张图片
      • 静态工厂模式
        • 06 Factory Method工厂方法(创建型)_第4张图片
    • 依赖注入:继续去掉new
      • 构造器注入
        • 06 Factory Method工厂方法(创建型)_第5张图片
      • Setter injection
        • 06 Factory Method工厂方法(创建型)_第6张图片
      • Interface injection
        • 06 Factory Method工厂方法(创建型)_第7张图片
    • Bean Factory
      • 像Spring这样的框架可以构造这些相同的对象,并在返回对客户机的引用之前将它们连接在一起。注意,所有提到ServiceExample的内容都已从代码中删除。
      • 06 Factory Method工厂方法(创建型)_第8张图片
      • 上面的代码构造对象并根据如下bean.xml配置文件将它们连接在一起
      • 06 Factory Method工厂方法(创建型)_第9张图片

 

你可能感兴趣的:(软件体系结构与设计模式,软件设计模式)