news 2026/9/13 12:33:41

深度理解设计模式——概述,SOLID原则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度理解设计模式——概述,SOLID原则

1. 设计模式概述

设计模式(Design Pattern, DP)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中反复出现的问题以及其解决方案,是面向对象设计原则的实际应用。

2. 起源与发展

设计模式的概念最早源自建筑领域。1977年,美国建筑大师克里斯托夫·亚历山大(Christopher Alexander)在著作《建筑模式语言:城镇、建筑、构造》中提出了253种建筑设计模式。1987年,肯特·贝克(Kent Beck)和沃德·坎宁安(Ward Cunningham)将这一思想应用于Smalltalk图形界面开发。1995年,埃里希·伽马(Erich Gamma)、理查德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)和约翰·威利斯迪斯(John Vlissides)合作出版《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software),系统提出了23种设计模式,这四位作者因此被称为"四人帮"(Gang of Four, GoF),他们的工作成为软件设计模式发展的重要里程碑。

3. 设计模式的分类

软件设计模式主要分为三大类,共23种经典模式:

3.1. 创建型模式(Creational Pattern, CP)

关注对象创建机制,避免直接实例化对象:

  • 抽象工厂模式(Abstract Factory Pattern)
  • 工厂方法模式(Factory Method Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)

3.2. 结构型模式(Structural Pattern, SP)

关注类和对象的组合,形成更大结构:

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

3.3. 行为型模式(Behavioral Pattern, BP)

关注对象间的交互和责任分配:

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

4. 设计模式的核心SOLID原则

设计模式的本质是面向对象设计原则的实际应用,这些原则可归纳为SOLID原则

  1. 单一职责原则(Single Responsibility Principle, SRP):一个类只做一件事,只应有一个引起它变化的原因。
  2. 开闭原则(Open Closed Principle, OCP):软件实体如类、模块和函数应对扩展开放,对修改封闭。
  3. 里氏替换原则(Liskov Substitution Principle, LSP):子类应能替换父类出现的任何地方并保持预期不变。
  4. 接口隔离原则(Interface Segregation Principle, ISP):设计接口时要精简单一,避免实现不需要的方法。
  5. 依赖倒置原则(Dependency Inversion Principle, DIP):细节应依赖于抽象,抽象不依赖于细节。

4.1. S - 单一职责原则 (SRP)

大白话:一个类/模块/组件只干一件事,就像一个厨师只负责炒菜,不负责点菜、洗碗和收银。

例子:你有个"用户信息"类,别让它既负责显示信息,又负责存数据库,还负责发邮件。应该拆成"UserInfo"(显示)、“UserDB”(存数据库)、“UserEmail”(发邮件)三个小助手,各司其职。

4.2. O - 开闭原则 (OCP)

大白话:软件实体要像瑞士军刀,能随时加新功能,但别动原来的刀片。

例子:你有个"按钮"组件,想加个"红色按钮"功能,就直接在按钮上加个"color"属性,而不是把原来的按钮代码都改一遍。这样你既保留了原有功能,又增加了新功能。

4.3. L - 里氏替换原则 (LSP)

大白话:子类要能像父类一样正常工作,不能"冒充"出问题。

例子:你有个"鸟"类,有"飞"的方法。企鹅是鸟的子类,但企鹅不能飞。按SOLID原则,应该这样设计:

  • "鸟"类只定义"下蛋"等通用行为
  • "会飞的鸟"类继承"鸟"类,有"飞"的方法
  • 企鹅继承"鸟"类,但没有"飞"的方法

这样,当你需要"飞"的时候,只用会飞的鸟,企鹅就不需要"飞"了。

4.4. I - 接口隔离原则 (ISP)

大白话:别让一个接口太"臃肿",像工具箱要分小盒装。

例子:别把"所有工具"都塞在一个接口里。应该拆成"切水果接口"、“切菜接口”、“开瓶器接口”,这样用切水果的就只依赖切水果接口,不用管其他工具。

4.5. D - 依赖倒置原则 (DIP)

大白话:别直接依赖具体实现,要依赖抽象。

例子:别写"我要用苹果手机",而要写"我要用手机"。这样以后想换安卓手机,只要手机接口不变,代码就不用大改。


4.6. 设计模式的价值

  1. 复用经验 (Reuse Experience)
  2. 标准化沟通 (Standardized Communication)
  3. 代码解耦 (Code Decoupling)
  4. 提升可维护性 (Improve Maintainability)
  5. 增强可扩展性 (Enhance Scalability)
  6. 培养抽象思维 (Cultivate Abstract Thinking)

设计模式不是固定公式,而是一种解决问题的思路。通过运用设计模式,开发人员可以站在前人的肩膀上,避免重复造轮子,使代码更加优雅、灵活和可维护。在软件开发中,设计模式已成为解决常见问题的通用解决方案,是软件工程领域的重要实践。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 2:57:20

9、量子计算在供应链实时路线优化中的应用

量子计算在供应链实时路线优化中的应用 1. 引言 在全球商业的当代格局中,供应链管理是高效运营和无缝物流的支柱。然而,传统供应链方法在适应现代商业环境的复杂性和不确定性方面面临重大挑战,从波动的消费者需求到动态的市场条件和物流限制,组织在优化供应链运营、降低成…

作者头像 李华
网站建设 2026/9/11 23:01:12

【JVS更新日志】物联网、低代码、项目管理12.17更新说明!

项目介绍 JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务配置化的方式,提供了低代码数据分析物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等&…

作者头像 李华
网站建设 2026/9/12 17:18:04

网络安全证书合集,看这一篇就够啦!

随着信息技术的飞速发展,网络安全问题日益凸显,网络安全行业也因此备受瞩目。在这一领域中,持有权威证书的专业人才备受欢迎。本文将为您介绍网络安全行业的热门证书,帮助您更好地了解这一行业,并为自己的职业发展提供…

作者头像 李华
网站建设 2026/9/14 1:43:39

打卡信奥刷题(2549)用C++实现信奥 P2113 看球泡妹子

P2113 看球泡妹子 题目背景 2014 年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情。 题目描述 本届世界杯共有 nnn 支球队,mmm 场比赛。男球迷小明喜欢看比赛,女球迷小红喜…

作者头像 李华
网站建设 2026/9/13 6:31:50

四天学会一本书的公司靠谱吗

四天学会一本书的公司靠谱吗?深度解析速成教育的真相与选择在知识焦虑与效率至上的时代,“四天学会一本书”这样的宣传语无疑极具诱惑力。各类培训机构,尤其是以技能提升和资格认证为导向的公司,纷纷推出此类短期速成课程&#xf…

作者头像 李华
网站建设 2026/9/13 10:56:17

低成本高质量:为何越来越多团队选择EmotiVoice?

低成本高质量:为何越来越多团队选择EmotiVoice? 在短视频、播客和互动游戏内容爆发的今天,个性化语音不再只是“锦上添花”,而是用户体验的核心组成部分。然而,要实现自然流畅、富有情感、还能定制音色的语音合成&…

作者头像 李华