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

你可能感兴趣的文章
org.tinygroup.serviceprocessor-服务处理器
查看>>
org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
查看>>
org/hibernate/validator/internal/engine
查看>>
SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
查看>>
ORM sqlachemy学习
查看>>
Ormlite数据库
查看>>
orm总结
查看>>
os.environ 没有设置环境变量
查看>>
os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
查看>>
os.system 在 Python 中不起作用
查看>>
OS2ATC2017:阿里研究员林昊畅谈操作系统创新与挑战
查看>>
OSCACHE介绍
查看>>
SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
查看>>
OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
查看>>
SQL--mysql索引
查看>>
OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
查看>>
OSChina 技术周刊第十期,每周技术抢先看!
查看>>
OSError: no library called “cairo-2“ was foundno library called “cairo“ was foundno library called
查看>>
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
查看>>
OSGi与Maven、Eclipse PlugIn的区别
查看>>