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

设计模式开篇:设计模式的七大核心原则

设计模式的原则是面向对象设计中总结出的指导性准则,它们帮助开发者创建灵活、可维护、可复用的代码。以下是设计模式的 七大核心原则


1. 单一职责原则 (SRP, Single Responsibility Principle)

  • 定义:一个类应该只有一个引起变化的原因(即只负责一项职责)。

  • 核心思想:高内聚、低耦合。

  • 例子:将用户管理拆分为UserDAO(数据库操作)和UserService(业务逻辑)。


2. 开闭原则 (OCP, Open-Closed Principle)

  • 定义:软件实体(类、模块、函数)应对扩展开放,对修改关闭。

  • 核心思想:通过抽象(接口/抽象类)和组合扩展功能,而非直接修改代码。

  • 例子:使用策略模式实现不同的支付方式,新增支付方式时无需修改原有代码。


3. 里氏替换原则 (LSP, Liskov Substitution Principle)

  • 定义:子类必须能够替换父类,且不影响程序的正确性。

  • 核心思想:继承应确保父类行为的逻辑一致性。

  • 例子正方形不应继承长方形(因为修改边长行为不一致),而应共同实现图形接口。


4. 接口隔离原则 (ISP, Interface Segregation Principle)

  • 定义:客户端不应被迫依赖它不需要的接口。应将大接口拆分为更小、更具体的接口。

  • 核心思想:避免“胖接口”,减少不必要的耦合。

  • 例子:将Animal接口拆分为FlyableSwimmable等,避免鸟类被迫实现游泳方法。


5. 依赖倒置原则 (DIP, Dependency Inversion Principle)

  • 定义

    1. 高层模块不应依赖低层模块,二者都应依赖抽象。

    2. 抽象不应依赖细节,细节应依赖抽象。

  • 核心思想:通过依赖注入(DI)或接口解耦。

  • 例子Service层依赖Repository接口,而非具体的MySQLRepository


6. 迪米特法则 (LoD, Law of Demeter) / 最少知识原则

  • 定义:一个对象应尽可能少地与其他对象交互(只与直接朋友通信)。

  • 核心思想:降低类之间的耦合,避免链式调用(如a.getB().getC().doSomething())。

  • 例子:通过封装方法,直接提供a.doSomething(),内部处理对BC的调用。


7. 合成复用原则 (CRP, Composite Reuse Principle)

  • 定义:优先使用组合(has-a)而非继承(is-a)来复用代码。

  • 核心思想:继承会导致强耦合,组合更灵活。

  • 例子:用List<T>组合实现集合功能,而非继承ArrayList


其他重要原则

  • KISS原则(Keep It Simple, Stupid):保持代码简单直接。

  • YAGNI原则(You Aren’t Gonna Need It):不要过度设计,仅实现当前需要的功能。

  • DRY原则(Don’t Repeat Yourself):避免重复代码,通过抽象提取公共逻辑。


总结

原则关键目标实现手段
单一职责原则 (SRP)高内聚拆分职责
开闭原则 (OCP)可扩展性抽象与多态
里氏替换原则 (LSP)继承安全性子类行为一致性
接口隔离原则 (ISP)接口最小化拆分接口
依赖倒置原则 (DIP)解耦依赖抽象
迪米特法则 (LoD)降低耦合减少交互
合成复用原则 (CRP)灵活复用优先组合

这些原则是设计模式的基础,实际应用中需根据场景权衡,而非机械遵循。


文章转载自:
http://benediction.hfytgp.cn
http://chromatographer.hfytgp.cn
http://arginine.hfytgp.cn
http://adi.hfytgp.cn
http://buskined.hfytgp.cn
http://bromine.hfytgp.cn
http://caseation.hfytgp.cn
http://bracteal.hfytgp.cn
http://calais.hfytgp.cn
http://chawl.hfytgp.cn
http://christianism.hfytgp.cn
http://adorer.hfytgp.cn
http://avery.hfytgp.cn
http://boson.hfytgp.cn
http://certes.hfytgp.cn
http://carroty.hfytgp.cn
http://biter.hfytgp.cn
http://acaudate.hfytgp.cn
http://carrottop.hfytgp.cn
http://acellular.hfytgp.cn
http://archoplasm.hfytgp.cn
http://basketstar.hfytgp.cn
http://anesthetization.hfytgp.cn
http://camaron.hfytgp.cn
http://californicate.hfytgp.cn
http://allochroic.hfytgp.cn
http://bathybic.hfytgp.cn
http://afforcement.hfytgp.cn
http://audience.hfytgp.cn
http://bigot.hfytgp.cn
http://www.dtcms.com/a/280646.html

相关文章:

  • kube-proxy 中 IPVS 与 iptables
  • PyTorch笔记7----------计算机视觉基础
  • OpenCV 伽马校正函数gammaCorrection()
  • MODIS_Landsat_Sentinel2星源分幅简述【20250715】
  • 视频编码中熵编码之基于上下文的变长编码(Huffman霍夫曼编码和指数哥伦布)
  • 【YOLOv11-目标检测】06-模型部署(C++)
  • 06_pt-table-sync 工具解决 MySQL 主从数据不一致
  • conda环境保存(后期再来整理)
  • etcd自动压缩清理
  • 2-Nodejs运行JS代码
  • iOS高级开发工程师面试——Swift
  • Fiddler 中文版抓包实战 构建标准化调试流程提升团队协作效率
  • echarts 绘制3D中国地图
  • React强大且灵活hooks库——ahooks入门实践之开发调试类hook(dev)详解
  • PostgreSQL 数据库中 ETL 操作的实战技巧
  • React源码6 三大核心模块之一:commit, finishConcurrentRender函数
  • 前端学习笔记:React.js中state和props的区别和联系
  • haproxy负载均衡
  • AntV G6 基础元素详解(React版)
  • 【PTA数据结构 | C语言版】创建哈夫曼树
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第二十一讲)
  • 【PDF识别改名】使用京东云OCR完成PDF图片识别改名,根据PDF图片内容批量改名详细步骤和解决方案
  • 同样是“跳转”,为何forward地址栏不变,redirect会变?
  • RNN、GRU 与 LSTM 计算成本深入对比
  • 基于光场相机的激光增材制造熔池温度场原位多眼监测​​
  • 【zynq7020】PL的“Hello LED”
  • FPGA高端图像ISP培训课程,提供工程源码+视频教程+FPGA开发板
  • Softhub软件下载站实战开发(十八):软件分类展示
  • 使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
  • Vmware中安装的CentOS7如何扩展硬盘大小