设计模式原则及分类

一、概念

设计模式:(Design pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。用来提高代码可复用性、可维护性、可读性、稳健性以及安全性。

二、设计模式原则:

  • 单一职责原则(Single Responsibility Principle):一个类应该只有一个发生变化的原因。每个类的功能尽可能的单一,只干一件事情,如果承担的职责太多就需要将类进行拆分。

  • 开闭原则(Open Closed Principle):对扩展开放,对修改关闭。为了使程序的扩展性好,易于维护和升级,在扩展的时候,尽量不要修改原代码,而是要了扩展原代码,比如接口实现。

  • 里氏替换原则(Liskov Substitution Principle):任何基类可以出现的地方,子类一定可以出现。个人理解是基类使用的地方可以用子类替换掉,且不会影响功能。因此该原则还要求:子类对父类的方法尽量不要重写和重载,如果给重写了,运行的时候就破坏了替换原则。

  • 接口隔离原则(Interface Segregation Principle):客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

  • 依赖倒置原则(Dependence Inversion Principle):上层模块不应该依赖底层模块,它们都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

上层的意思就是依赖方,例如一个人出远门需要依赖交通工具;

下层就是被依赖方,如交通工具。交通工具包括大巴、火车、飞机、高铁等。

此时如果上层直接依赖底层实体工具,以后新添加一个出行工具就要动上层依赖方代码,此时我们可以给所有下层的交通工具抽象出一个接口vehicl,上层依赖vehicl接口,这样底层代码扩展不会影响上层代码功能。

  • 迪米特法则(最少知道原则)(Law of Demeter):只与你的直接朋友交谈,不跟"陌生人"说话。一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。

记忆要点:SOLID(坚固的),分别是上面前5个单词的首字母。

三、设计模式分类:

  • 创建型模式:创建型设计模式主要解决"对象的创建"问题,共五种:

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

记忆方法:工厂 里有个孤单 的建造者 在建圆形大楼。

  • 结构型模式:结构型设计模式主要解决"类或对象的组合或组装"问题,共七种:

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

记忆方法:代理人 觉得这座桥 的外观 不好看,需要再装饰 下,可以加一组圆圆 的桥洞,再配上几个桥墩。

  • 行为型模式:行为型设计模式主要解决的就是"类或对象之间的交互"问题,共十一种:

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

参考文章:
快速记忆23种设计模式
对"依赖倒置原则"的理解

相关推荐
geovindu3 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
怕浪猫5 小时前
面试官让我手写一个 Tool Use,我用了 3 种方案
设计模式·面试·程序员
geovindu21 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
Carl_奕然1 天前
【智能体】Loop 的四种设计模式之:Event-Driven Loop(2026 最新版)
人工智能·驱动开发·python·设计模式
Carl_奕然1 天前
【智能体】Loop 的四种设计模式之:Hill Climbing Loop(2026 最新版)
人工智能·python·设计模式
晚安code2 天前
设计模式入门:吃透 SOLID 原则与迪米特法则,再学 5 个高频模式
后端·设计模式
染指11102 天前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
路弥行至3 天前
【Head First 设计模式】第 2 章:观察者模式 —— 用现代 C++ 重新解读“交互对象的松耦合
c++·经验分享·笔记·观察者模式·设计模式·入门教程·headfirst
YYYing.3 天前
【设计模式系列 (九) 】装饰器模式
c++·后端·设计模式·装饰器模式·c/c++
沫璃染墨3 天前
《从零入门Linux系统篇(五十六):线程篇·九——生产者消费者模型:从条件变量到BlockingQueue实现》
linux·服务器·c++·驱动开发·设计模式·架构·系统架构