GOF提出的设计模式主要基于以下面向对象设计原则:

    • 对接口编程而不是对实现编程
    • 优先使用对象组合而不是继承

    设计模式可以分为三大类:

    • 创建型模式
    • 结构型模式
    • 行为型模式

    创建型模式:

    • 工厂模式
    • 抽象工厂模式
    • 单列模式
    • 建造者模式
    • 原型模式

    结构型模式:

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

    行为型模式

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

    设计模式六大原则(标准说法)

    • 开闭原则

    对扩展开放,对修改关闭

    • 里氏代换原则

    任何基类可以出现的地方,子类一定可以出现。

    • 依赖倒转原则

    针对接口编程,依赖于抽象而不依赖于具体实现

    • 接口隔离原则

    使用多个隔离的接口,比使用单个接口要好,降低类的耦合度,强调降低依赖,降低耦合。

    • 最少知道原则

    一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

    • 合成复用原则

    尽量使用合成/聚合的方式,而不是使用继承。

    设计原则(自己语言总结)

    • 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
    • 针对接口编程,而不是针对实现编程。
    • 多用组合,少用继承。
    • 为了交互对象之间的松耦合设计而努力。
    • 类应该对扩展开放,对修改关闭。
    • 要依赖抽象,不要依赖具体类。

    1、策略模式
    策略模式定义了算法簇(也可以说是一组行为)让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
    image.png

    2、观察者模式
    观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所以依赖者都可以接收到通知。
    主题和观察者之间松耦合。

    image.png

    3、装饰者模式
    (给爱用继承的人一个全新的设计眼界)
    装饰者模式动态的将责任附加到对象上。
    装饰者和被装饰者(组件)要有相同的接口,因为装饰者必须能取代被装饰者
    image.png

    4、工厂模式
    我们不应该针对实现编程,但是当我们使用new时,不正是在针对实现编程吗?
    工厂方式模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

    5、抽象工厂模式
    抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

    6、单件模式
    确保一个类只有一个实例,并提供一个全局访问点。

    7、命令模式
    命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。