授课语音

设计模式概述

1. 介绍

设计模式(Design Pattern)是一套经过分类、被反复使用的代码设计经验的总结。它源于建筑领域,由哈佛大学建筑学博士克里斯托弗·亚历山大提出,后被引入到软件工程,特别是面向对象的设计中。

2. 设计模式的必要性

设计模式的产生旨在解决软件开发中反复出现的设计问题,提供标准化的解决方案,具体目的包括:

  • 重用代码:避免重复设计和实现。
  • 提高代码质量:减少系统中的错误和问题。
  • 促进沟通:提供共享的设计词汇和概念,提升开发人员间的理解与沟通。

3. 基本原则

设计模式遵循以下基本原则:

3.1 单一职责原则(SRP)

  • 定义:一个类只负责一项职责,降低复杂度,提高可读性和可维护性。
  • 实现方法:将不同职责分离到不同类中。

3.2 开闭原则(OCP)

  • 定义:对扩展开放,对修改关闭,提升系统的可扩展性和可维护性。
  • 实现方法:通过接口或抽象类定义稳定的抽象层。

3.3 里氏替换原则(LSP)

  • 定义:子类对象应能替换父类对象,确保程序行为不变。
  • 实现方法:子类实现父类所有方法,不改变其预期行为。

3.4 依赖倒置原则(DIP)

  • 定义:高层模块不应依赖低层模块,二者应依赖于抽象。
  • 实现方法:通过依赖注入和接口编程实现。

3.5 接口隔离原则(ISP)

  • 定义:使用多个专门的接口而非一个通用的大接口,降低耦合度。
  • 实现方法:将大接口拆分为多个小接口。

3.6 迪米特法则(LoD)

  • 定义:对象应对其他对象有最少的了解,降低系统耦合度。
  • 实现方法:减少对象之间的直接交互,仅与相关对象通信。

4. 设计模式的分类

设计模式可分为三大类:

4.1 创建型模式(Creational Patterns)

  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
  • 工厂方法模式(Factory Method Pattern):定义创建对象的接口,让子类决定实例化哪一类。
  • 抽象工厂模式(Abstract Factory Pattern):提供创建一系列相关对象的接口。
  • 建造者模式(Builder Pattern):将复杂对象的构建与其表示分离。
  • 原型模式(Prototype Pattern):通过拷贝原型创建新的对象。

4.2 结构型模式(Structural Patterns)

  • 适配器模式(Adapter Pattern):将一个类的接口转换成客户期望的接口。
  • 装饰模式(Decorator Pattern):动态给对象增加额外职责。
  • 代理模式(Proxy Pattern):为其他对象提供代理,以控制访问。
  • 外观模式(Facade Pattern):为子系统提供一致的接口。
  • 桥接模式(Bridge Pattern):将抽象部分与实现部分分离。
  • 组合模式(Composite Pattern):将对象组合成树形结构表示部分-整体层次。
  • 享元模式(Flyweight Pattern):通过共享技术支持大量细粒度对象。

4.3 行为型模式(Behavioral Patterns)

  • 策略模式(Strategy Pattern):定义一系列算法并封装,使其可互相替换。
  • 模板方法模式(Template Method Pattern):定义算法的骨架,将某些步骤延迟到子类。
  • 观察者模式(Observer Pattern):定义一对多依赖关系,当一个对象改变状态时通知所有依赖对象。
  • 迭代器模式(Iterator Pattern):顺序访问聚合对象的各个元素。
  • 责任链模式(Chain of Responsibility Pattern):多个对象都有机会处理请求,减少耦合。
  • 命令模式(Command Pattern):将请求封装为对象,允许用不同请求对客户进行参数化。
  • 备忘录模式(Memento Pattern):捕获对象的内部状态并保存。
  • 状态模式(State Pattern):允许对象在内部状态改变时改变其行为。
  • 访问者模式(Visitor Pattern):定义作用于对象结构的操作,新增操作而不改变类。
  • 中介者模式(Mediator Pattern):用中介对象封装一系列对象的交互。
  • 解释器模式(Interpreter Pattern):定义语言的文法表示并提供解释器。

图示

Image___1397757896265043700===bb502d6567f7c3848518044160e5616e===1_1.png___

去1:1私密咨询

系列课程: