设计模型

【Easy搞定Golang设计模式(Go语言设计模式,如此简单)】—— B站刘丹冰Aceld

冰叔的系列视频做的都很用心、很优质,把设计模式、网络IO复用、go gc、go gpm都过了一遍,受益良多,很推荐学习。
关于冰叔这套设计模式的课程,并没有涉及全部23种设计模式,只选取了一些重要的模式进行展开。

【设计模式 —— 菜鸟教程】

菜鸟教程上的内容相对较全面,对每一种模式介绍概念、优缺、使用场景等,还给出了实现的模块图和Java代码。不仅有熟知的23种设计模式,还额外介绍了一些模式,如MVC、拦截过滤器等。


一、设计模式之父

“四人帮”(Gang of Four,GoF)是设计模式领域的鼻祖,他们是Erich Gamma、Richard
Helm、Ralph Johnson和John Vlissides四人。
1994年,他们合著了《Design Patterns - Elements of Reusable Object - Oriented Software》一书,其中首次提出软件开发中设计模式的概念,并介绍了23种经典的设计模式。

二、面向对象设计原则

学习设计模式首先得了解七大原则,23种设计模式都是遵循着这些原则进行设计的。
当然,这并不是说这些模式都同时满足七大原则,而只是满足其中的若干个原则,有时还甚至会违背其中个别规则。

七大原则

  1. 单一职责原则(Single Responsibility Principle,SRP)
    一个类只应该负责一项职责,如果承担过多职责会导致类变得复杂、难以理解和维护,甚至在其中一个职责发生变化时可能影响到其他职责。
  2. 开闭原则(Open - Closed Principle,OCP)
    软件实体(类、模块、函数)应该对扩展开放,对修改关闭。在不修改现有代码的基础上通过扩展新增功能,从而提升软件可维护性和可扩展性,避免因为对现有代码的修改而引入新的错误。
  3. 里氏代换原则(Liskov Substitution Principle,LSP)
    所有引用基类的地方都能使用其子类的对象。子类对象能够替换掉父类对象,而不影响程序正确性,保证了继承关系的正确性和可靠性,防止子类对父类的行为进行不切当的修改,从而破坏程序整体结构。
  4. 依赖倒置原则(Dependency Inversion Principle,DIP)
    高层模块不应该依赖低层模块,二者都应该依赖抽象,即面向接口编程的思想。通过依赖倒置可以降低模块间耦合度,提高系统稳定性和可维护性,使得高层模块能够独立于低层模块的变化而变化。
  5. 接口隔离原则(Interface Segregation Principle,ISP)
    一个类不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最少接口的基础上。
  6. 迪米特法则(Law of Demeter,LoD)
    一个类对自己依赖的类所知道的信息越少越好,被依赖的类尽管逻辑再复杂都还是被封装在其内部,降低类之间的耦合。
  7. 合成复用原则(Composite Reuse Principle,CRP)
    优先使用组合的方式实现代码复用,而不是继承。组合关系比继承关系具有更高灵活性和可维护性,因为可以在运行时动态组合对象,而继承关系是在编译时就确定好的。

三、23种设计模式(TODO)

3.1 创建型

  • 单例模式
  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式
  • 原型模式
  • 建造者模式

3.2 结构型

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

3.3 行为型

  • 职责链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式