设计模式-01-概述

设计模式是软件设计中常见问题的典型解决方,尝试着学习一下它到底是怎样的

6大设计原则

SOLID 原则

  1. 单一职责原则 (Single responsibility principle, SRP),每个实体功能都应该专注于一件事上。同时做两件以上的事情,不但阅读性降低,出错时也更难找到问题点。另外多个职责耦合在一起,会影响复用性

  2. 开放封闭原则 (Open-Close principle, OCP),通过增加新代码来扩展系统的功能,而不是通过修改原本已经存在的代码来扩展系统的功能。当未来需求有异动时,如果为了新需求而改动原有代码,可能会造成其他调用原本代码时发生非预期错误

  3. 里氏替换原则 (Liskov substitution principle, LSP),任何基类可以出现的地方,子类一定可以出现(替换)。子类可以扩展父类的功能,但不能改变父类原有的功能。只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

    实现 OCP 原则的关键步骤就是抽象化,而基类与子类的继承关系是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

  4. 接口隔离原则 (Interface segregation principle, ISP),使用多个隔离的小接口,比使用单个整合在一起的大接口要好。为了方便维护和升级已有的代码,需要尽量降低类之间的耦合度,降低依赖,降低耦合

  5. 依赖反转原则 (Dependency inversion principle, DIP),要依赖于抽象,而不依赖于具体。即高低阶层代码都依赖一个抽象类,在抽象类中定义所依赖的方法,并由子类去实现

  6. 最少知识原则(Least knowledge principle, LKP),实体之间的联系(通信/交流)应当尽量少。即一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。这样当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易(主要还是解耦思想)。

DRY 原则

Do not repeat yourself

设计模式分类

设计模式根据其目的来分类:

  • 创建型模式提供创建对象的机制, 增加已有代码的灵活性和可复用性,注重如何初始化一个或一群实体
  • 结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效,注重实体之间互相组合取代继承
  • 行为模式负责对象间的高效沟通和职责委派,注重分配每个实体的功能,建立联系沟通。

创建型模式

  1. 单例模式(Singleton Design Pattern)
  2. 简单工厂模式(Simple Factory Pattern)
  3. 工厂方法模式(Factory Method Pattern)
  4. 抽象工厂模式(Abstract Factory)
  5. 建造者模式(Builder Design Pattern)
  6. 原型模式(Prototype Design Pattern)

结构性模式

  1. 代理模式(Proxy Design Pattern)
  2. 桥接模式(Bridge Design Pattern)
  3. 装饰器模式(Decorator Design Pattern)
  4. 适配器模式(Adapter Design Pattern)
  5. 门面模式(Facade Design Pattern)
  6. 组合模式(Composite Design Pattern)
  7. 享元模式(Flyweight Design Pattern)

行为模式

  1. 观察者模式(Observer Design Pattern)
  2. 模板方法模式(Template Design Pattern)
  3. 策略模式(Strategy Method Design Pattern)
  4. 职责链模式(Chain Of Responsibility Design Pattern)
  5. 状态模式(State Design Pattern)
  6. 迭代器模式(Iterator Design Pattern)
  7. 访问者模式(Visitor Design Pattern)
  8. 备忘录模式(Memento Design Pattern)
  9. 命令模式(Command Design Pattern)
  10. 解释器模式(Interpreter Design Pattern)
  11. 中介者模式(Mediator Design Pattern)

其中个人觉得以下模式常见且实用,可以好好把握

  • 模板方法模式
  • 组合模式
  • 桥接模式
  • 原型模式
  • 单例模式
  • 策略模式
  • 职责链模式
  • 状态模式
  • 迭代器模式

参考文档

  1. https://lailin.xyz/post/go-design-pattern.html
  2. https://docs.microsoft.com/zh-cn/azure/architecture/patterns/
  3. https://github.com/senghoo/golang-design-pattern
  4. https://github.com/mohuishou/go-design-pattern
  5. https://github.com/idootop/Design-Patterns-Dart