当前位置: 首页 > article >正文

设计模式设计原则

设计模式分类

创建型模式

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

结构型模式

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

行为型模式

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

设计模式的六大原则

  1. 开闭原则

    • 定义:对扩展开放,对修改关闭。
    • 目标:提高程序的扩展性和维护性。
    • 实现:使用接口和抽象类。
  2. 里氏代换原则

    • 定义:任何基类可以出现的地方,子类一定可以出现。
    • 目标:增强继承复用的有效性和安全性。
    • 实现:确保子类可以替换基类。
  3. 依赖倒转原则

    • 定义:真对接口编程,依赖于抽象而不依赖于具体。
    • 目标:降低依赖性,提高灵活性。
  4. 接口隔离原则

    • 定义:使用多个隔离的接口,比使用单个接口要好。
    • 目标:降低类间的耦合度。
  5. 迪米特法则(最少知道原则)

    • 定义:一个实体应当尽量少地与其他实体发生相互作用。
    • 目标:保持模块间的独立性。
  6. 合成复用原则

    • 定义:尽量使用合成/聚合的方式,而不是使用继承。
    • 目标:提高代码的复用性和灵活性。

创建型模式示例

1. 工厂模式

  • 描述:客户类和工厂类分开,消费者无需修改即可接纳新产品。

2. 建造者模式

  • 描述:将产品的内部表象和产品的生成过程分离,使产品内部表象可以独立变化。

3. 工厂方法模式

  • 描述:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类。

4. 原型模式

  • 描述:通过复制一个原型对象来创建新的对象。

5. 单例模式

  • 描述:确保某一个类只有一个实例,并自行实例化并向整个系统提供这个实例。

结构型模式示例

6. 适配器模式

  • 描述:将一个类的接口转换成另一个接口,使原本因接口不兼容而不能一起工作的类可以一起工作。

7. 桥梁模式

  • 描述:将抽象化与实现化分离,使二者可以独立变化。

8. 组合模式

  • 描述:将对象组织到树形结构中,描述整体与部分的关系。

9. 装饰模式

  • 描述:动态地给一个对象添加一些额外的职责。

10. 外观模式

  • 描述:为子系统提供一个一致的接口,使子系统更易于使用。

11. 享元模式

  • 描述:以共享的方式高效地支持大量细粒度对象。

12. 代理模式

  • 描述:给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。

行为型模式示例

13. 责任链模式

  • 描述:将多个对象通过引用串连成一条链,请求沿着这条链传递,直到有对象处理它为止。

14. 命令模式

  • 描述:将请求封装成对象,以便使用不同的请求、队列请求或记录请求日志,支持可撤销的操作。

15. 解释器模式

  • 描述:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

16. 迭代子模式

  • 描述:顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

17. 调停者模式

  • 描述:将一组对象互相作用的方式进行封装,使它们不必显式地相互引用。

18. 备忘录模式

  • 描述:在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。

19. 观察者模式

  • 描述:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

20. 状态模式

  • 描述:允许一个对象在其内部状态改变时改变它的行为。

21. 策略模式

  • 描述:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。

22. 模板方法模式

  • 描述:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。

23. 访问者模式

  • 描述:封装一些作用于某种数据结构元素之上的操作,使得无需修改数据结构即可定义作用于这些元素的新操作。


http://www.kler.cn/a/279906.html

相关文章:

  • 【C#】【EXCEL】Bumblebee/Classes/ExRange.cs
  • 【STM32】PWR电源控制(低功耗模式)
  • 谷歌浏览器 Google Chrome 禁止扩展.crx更新
  • 【详细】mysql常用命令行大全,优雅的在命令提示符(CMD)中使用mysql 命令。
  • echarts组件——条形统计图
  • PHP概述-特点-应用领域-如何学习
  • PowerShell自动化Windows系统管理任务
  • ubuntu 20.04系统安装pytorch
  • Linux—互斥锁
  • 云原生周刊:KubeSphere 宣布开源 Thanos 的企业级发行版 Whizard
  • 深入解析SSRF和Redis未授权访问
  • 深度学习100问3-什么是共现矩阵及其作用
  • 华为Huawei路由器交换机SSH配置
  • 009 批量删除
  • docker 拉取镜像超时
  • visual studio 2022 加载.vdproj
  • 原神4.8版本抽到角色和重点培养数据表
  • EV代码签名证书——消除软件下载时的安全警告
  • AI学习指南深度学习篇-长短时记忆网络(LSTM)简介
  • 《Object-Oriented Software Construction》第2版读后感