设计模式——概述

110 阅读3分钟

alex-wong-l5Tzv1alcps-unsplash.jpg

一、设计思想

  • 封装 (不关注细节、系统井井有条)
  • 解耦 (高效开发、提高可维护性、可变性)
  • 复用 (保证一致性、正确性、易于修改、提高开发效率)

二、设计原则

  • SOLID原则
    • SRP单一职责原则(一个类、模块只干一个职责)
    • OCR开闭原则(对扩展开放、对修改关闭)
    • LSP里式替换原则 (子类扩展父类、而非修改)
    • ISP接口隔离原则
    • DIP依赖反转原则(执行流程由框架控制)
  • KISS\YAGNI原则(保持简单、不过度设计)
  • DRY原则(不写重复代码)
  • LOD原则:迪米特法则(最小知识原则,高内聚、低耦合)

三、设计模式(23种)

设计模式是对软件设计中普遍存在的问题所提出的解决方案。
目的是提高代码的可读性、可扩展性、复用性、可维护性等

分类 (斜体为不常用模式) image.png

问题: 如何区分 结构型和行为型?
结构型模式描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式,也可分为代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式等7类

3.1 创建型

  • 单例模式
    • 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点
    • 主要解决:一个全局使用的示例频繁的创建与销毁
    • 适用于:控制实例数目,节省系统资源
    • 实例:
  • 工厂模式
    • 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
    • 适用于:明确地计划不同条件下创建不同实例时
    • 实例:
  • 抽象工厂
    • 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    • 适用于:?
    • 实例:
  • 建造者模式
    • 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
    • 适用于:一些基本部件不会变,而其组合经常变化
  • 原型模式
    • 意图:
    • 适用于:
    • 实例:

3.2 结构型

  • 代理模式
    • 意图:为其他对象提供一种代理以控制对这个对象的访问
    • 适用于:想在访问一个类时做一些控制
    • 实例:
  • 桥接模式
    • 意图:将抽象部分与实现部分分离,使它们都可以独立的变化
    • 适用于:
    • 实例:墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的
  • 装饰器模式
    • 意图:动态地给一个对象添加一些额外的职责
    • 适用于:在不想增加很多子类的情况下扩展类
    • 实例:
  • 适配器模式
    • 意图:将一个类的接口转换成客户希望的另外一个接口
    • 适用于:
    • 实例:美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V
  • 门面模式
    • 意图:
    • 适用于:
    • 实例:
  • 组合模式
    • 意图:
    • 适用于:
    • 实例:
  • 享元模式
    • 意图:
    • 适用于:
    • 实例:

3.3 行为型

  • 观察者模式
    • 意图:
    • 适用于:
    • 实例:
  • 模板模式
    • 意图:
    • 适用于:
    • 实例:
  • 策略模式
    • 意图:
    • 适用于:
    • 实例:
  • 职责链模式
    • 意图:
    • 适用于:
    • 实例:
  • 迭代器模式
    • 意图:
    • 适用于:
    • 实例:
  • 状态模式
    • 意图:
    • 适用于:
    • 实例:
  • 访问者模式
    • 意图:
    • 适用于:
    • 实例:
  • 备忘录模式
    • 意图:
    • 适用于:
    • 实例:
  • 命令模式
    • 意图:
    • 适用于:
    • 实例:
  • 解释器模式
    • 意图:
    • 适用于:
    • 实例:
  • 中介模式
    • 意图:
    • 适用于:
    • 实例:

四、面向对象

  • 封装
  • 抽象
  • 继承
  • 多态