博客
关于我
软件架构设计原则
阅读量: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/

你可能感兴趣的文章
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
NO.23 ZenTaoPHP目录结构
查看>>
no1
查看>>
NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
查看>>
NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
node exporter完整版
查看>>
Node JS: < 一> 初识Node JS
查看>>
Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
查看>>
Node 裁切图片的方法
查看>>