博客
关于我
软件架构设计原则
阅读量:181 次
发布时间:2019-02-28

本文共 1639 字,大约阅读时间需要 5 分钟。

开闭原则

开闭原则(Open-Closed Principle,OCP)是软件开发中的核心原则之一。它强调一个软件实体(如类、模块或函数)应该对扩展开放,对修改关闭。简单来说,就是既要能够轻松扩展功能,又要保证修改时不影响原有的功能。这一原则的核心在于通过抽象化的框架实现扩展,而对修改则保持关闭。

以软件版本更新为例,按照开闭原则,我们可以通过增加新功能而不修改现有代码,确保系统的稳定性和可维护性。这使得系统在面对新需求时更加灵活,同时也降低了维护的难度。

依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,DIP)是一种设计理念,强调高层模块不应直接依赖底层模块,而是通过抽象层进行间接依赖。具体来说,就是让高层模块依赖于抽象接口,而不是具体实现类。这样一来,系统的耦合度得到了有效降低,代码的可维护性也得到了提升。

依赖倒置的核心在于减少类与类之间的直接依赖关系。通过使用抽象类或接口,高层模块可以对底层模块的具体实现方式保持不关心,从而实现对修改的更高程度的控制。这也是面向接口编程的一种体现,对系统的稳定性和可扩展性有着重要意义。

单一职责原则

单一职责原则(Single Responsibility Principle,SRP)是一种设计理念,强调一个类或模块只能承担单一的职责。如果一个类承担了多个职责,那么在任何一个职责发生变化时,都可能对其他职责产生影响,导致维护成本上升。

如何实现单一职责原则呢?简单来说,就是将一个复杂的功能拆分成多个更小的、相互独立的功能,然后分别由不同的类或模块来实现。这样一来,每个类的变更只会影响其直接相关的功能,从而降低了系统的维护难度。

接口隔离原则

接口隔离原则(Interface Segregation Principle,ISP)强调不要让一个类对它不需要的接口产生依赖。具体而言,系统应该通过多个专门的接口,而不是一个总接口来实现功能。这样可以确保客户端只关注自己真正需要的接口,而不必关心其他不需要的接口。

接口隔离原则的具体体现包括:

  • 一个类对另一个类的依赖应该建立在最小的接口上。
  • 避免建立庞大臃肿的总接口,而是通过细化接口来实现功能的模块化。
  • 接口中的方法数量也应该适度,不宜过多或过少。

迪米特原则

迪米特原则(Law of Demeter,LoD)是一种设计理念,强调对象之间的交互应尽可能少。具体来说,一个对象不应该对其他对象了解太多,除非它们是“朋友”或是直接相关的。迪米特原则以“只和朋友交流,不和陌生人说话”为核心。

在实际应用中,迪米特原则可以通过以下方式来体现:

  • 对于成员变量、方法的输入输出参数等,涉及的类都应是“朋友类”。
  • 方法内部的操作无需涉及其他类,除非它们是通过抽象接口进行交互。

里氏替换原则

里氏替换原则(Liskov Substitution Principle,LSP)强调一个子类可以替换父类,而对程序的行为不会产生影响。具体来说,如果一个软件对某个类型T1的对象o1,能够透明地使用另一个类型T2的对象o2,那么T2就是T1的子类型。

里氏替换原则的核心在于保证子类扩展的透明性和兼容性。它要求所有对父类的引用都应是透明的,即子类对象可以完全替代父类对象,而不会对程序的功能产生任何影响。这一原则还强调,子类不能改变父类的行为规范,只能在其基础上进行扩展。

合成复用原则

合成复用原则(Composite/Aggregate Reuse Principle,CARP)强调在软件复用时,优先使用对象的组合或聚合,而不是继承关系。通过将多个对象组合成一个整体对象,可以更灵活地实现功能,同时降低类之间的耦合度。

合成复用原则的主要优势在于:

  • 它使得一个类的变化对其他类的影响较小。
  • 它提供了更高的灵活性,使得系统可以更轻松地进行扩展和维护。

通过合成复用原则,我们可以避免过度依赖继承关系,从而构建出更加灵活和可维护的系统架构。

转载地址:http://qemj.baihongyu.com/

你可能感兴趣的文章
NOIP模拟测试19
查看>>
NOIp模拟赛二十九
查看>>
Vue3+element plus+sortablejs实现table列表拖拽
查看>>
Nokia5233手机和我装的几个symbian V5手机软件
查看>>
non linear processor
查看>>
Non-final field ‘code‘ in enum StateEnum‘
查看>>
none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
查看>>
None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
查看>>
NoNodeAvailableException None of the configured nodes are available异常
查看>>
Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
查看>>
nopcommerce商城系统--文档整理
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NoSQL介绍
查看>>
NoSQL数据库概述
查看>>
Notadd —— 基于 nest.js 的微服务开发框架
查看>>
NOTE:rfc5766-turn-server
查看>>
Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Notepad++在线和离线安装JSON格式化插件
查看>>
notepad++最详情汇总
查看>>