乐趣区

工厂模式和策略模式

什么是设计模式?

设计模式是对面向对象设计中反复出现的问题的解决方案。

为什么要用设计模式?

使用设计模式是为了是代码更容易被他人理解、同时使代码的更加的可维护、可扩展、可复用。

设计模式的原则

    • 开放 封闭原则:开发扩展 封闭修改
    • 依赖倒置原则:

      • 高层模块不应该依赖低层模块,两个都应该依赖抽象
      • 抽象不应该依赖细节。细节应该依赖抽象
    • 里氏代换原则:

      • 子类型必须能够替换掉它们的父类型
    • 接口隔离原则
    • 迪米特法则又称最少知道原则
    • 合成复用原则
    • 设计模式的类型:

      • 创建型模式: 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

        • 工厂模式
        • 抽象工厂模式
        • 单例模式
        • 建造者模式
        • 原型模式
      • 结构型模式: 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

        • 适配器模式
        • 桥接模式
        • 过滤器模式
        • 组合模式
        • 装饰器模式
        • 外观模式
        • 享元模式
        • 代理模式
      • 行为型模式:

        • 责任链模式
        • 命令模式
        • 解释器模式
        • 迭代器模式
        • 中介者模式
        • 备忘录模式
        • 观察者模式
        • 状态模式
        • 空对象模式
        • 策略模式
        • 模板模式
        • 访问者模式

    简单工厂

    优点: 将创建产品对象封装起来,后期如果需要修改类名的时候,仅仅需要修改工厂类的类名就可以。

    缺点: 违背了开放 - 封闭原则,当我们要新增一个 OPPO 手机的时候,需要修改工厂方法。

    工厂方法模式: 定义一个用于创建对象的接口,让子类决定实例化哪一类。工厂方法使一个类的实例化延迟到其子类。

    优点:

    1. 客户端使用对象,只需要知道其名称就可以了。
    2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以了。

    缺点:

    ​ 每次增加一个产品时,都需要增加一个具体类和对象实现工厂。

    抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    抽象工厂结构图:

    抽象工厂优化结构图

    策略模式: 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

    工厂方法模式 和 抽象工厂模式

    区别

    • 工厂方法模式是用一个 工厂类 来创建 一个 对象。
    • 抽象工厂模式是用一个 工厂类 来创建 多个 对象。因为这些对象属于同一个 产品线

    有一个 手机工厂 , 可以用来生产手机。生产一部手机需要: 操作系统 , CPU, 内存 等等:

    如果要支持生产以前的 诺基亚功能机 和现在的 安卓智能手机 ,那么他们所需的 操作系统 , CPU, 内存 都是不同的。那就可以创建两个抽象工厂:诺基亚 Factory安卓 Factory:

    参考:

    《大话设计模式》https://book.douban.com/subje…

    设计模式 菜鸟教程: https://www.runoob.com/design…

    退出移动版