设计模式——概述

参考

简介

1994,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。

四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。

面向对象系统的分析和设计的追求:高内聚(Cohesion)和低耦合(Coupling)

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

争议

  • 一种针对不完善编程语言的蹩脚解决方案(例如,策略模式在绝大部分现代编程语言中可以简单地使用匿名(lambda)函数来实现)
  • 低效的解决方案
  • 不当使用

创建型模式

在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化独享,使程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

  • 工厂模式(Factory)
  • 抽象工厂模式(AbstactFactory)
  • 单例模式(Singleton)
  • 建造者模式(Builder)
  • 原型模式(Prototype)

这类模式提供创建对象的机制, 能够提升已有代码的灵活性和可复用性。

结构型模式

关注对象之间的组合和关系,解决如何构建灵活且可复用的类和对象结构。

  • 适配器模式(Adapter)
  • 桥接模式(Bridge)
  • 过滤器模式(Bridge)
  • 组合模式(Composite)
  • 装饰器模式(Decorator)
  • 外观模式(Facade)
  • 享元模式(Flyweight)
  • 代理模式(Proxy)

这类模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

行为模式

关注对象之间的通信和交互,解决对象之间的责任分配和算法的封装。

  • 责任链模式(Chain of Responsibility)
  • 命令模式(Command)
  • 解释器模式(Interpreter)
  • 迭代器模式(Iterator)
  • 中介者模式(Mediator)
  • 备忘录模式(Memento)
  • 观察者模式(Observer)
  • 状态模式(State)
  • 空对象模式(Null Object)
  • 策略模式(Strategy)
  • 模板模式(Template)
  • 访问者模式(Visitor)

这类模式负责对象间的高效沟通和职责委派。

设计模式的六大原则

  • 单一职责原则(SRP)Single Responsibility Principle:一个类只负责一项职责(功能),职责越单一,代码耦合度越低,维护越简单。
  • 开闭原则(OCP)Open Closed Principle:对扩展开放,对修改关闭。即新增功能应通过扩展实现,而非修改原有代码。
  • 里氏替换原则(LSP)Liskov Substitution Principle:子类对象必须能够替换其父类对象,并且功能不被破坏。强调继承体系的合理性。
  • 依赖倒置原则(DIP)Dependency Inversion Principle:高层模块不依赖底层模块,两者都应依赖于抽象。强调通过接口或抽象类编程。
  • 接口隔离原则(ISP)Interface Segregation Principle:不应该强迫用户依赖它们不使用的接口,应拆分成更小更具体的接口。
  • 迪米特法则(LOD)Law of Demeter:一个对象应该对其他对象有尽可能少的了解,即“最少知道原则”。避免过度耦合。

comment: