设计模式六大原则
发布日期:2021-10-02 15:13:33 浏览次数:1 分类:技术文章

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

这些原则不仅仅局限于设计模式中,适用于任何编码阶段。

工厂模式的三类中就很好的考虑了开闭原则、依赖倒置原则、迪米特原则。

 

六大原则:单一职责原则(Single Responsibility Principle)

                     里氏替换原则(Liskov Substitution Principle)

                     依赖倒置原则(Dependence Inversion Principle)

                     接口隔离原则(Interface Segregation Principle)——开闭原则的基础

                     迪米特原则(Demeter Principle)

                     开闭原则(Open Close Principle)——基石

 

1、单一职责原则

定义:一个类只负责一个功能领域的职责,即有且仅有一原因引起类的变化(方法、接口也一样)

解释:软件系统中,一个类承担的职责越多,它被复用的可能性就越小,耦合度就越高

 

核心优点:降低耦合度

      1) 降低了类的复杂度。一个类只负责一项职责比负责多项职责要简单得多。

      2) 提高了代码的可读性。一个类简单了,可读性自然就提高了。

      3) 提高了系统的可维护性。代码的可读性高了,并且修改一项职责对其他职责影响降低了,可维护性自然就提高了。

      4) 变更引起的风险变低了。单一职责最大的优点就是修改一个功能,对其他功能的影响显著降低。

 

    实际编程中要综合考虑类级别、方法级别、接口级别的单一职责原则,有时需要违背类级别的SRP而确保方法级别的SRP,是开销降低。

 

2、里氏替换原则

定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象

里氏替换原则前提:使用继承(类B继承类A),除添加新的方法完成新增功能外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法

 

如果非要重写父类的方法,比较通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖、聚合,组合等关系代替。

 

继承的优势:简化人们对事物的认识,清晰体现类之间的层次关系;提高代码的复用性;实现多态;减少程序复杂度

继承的劣势:程序的可移植性降低;增加了对象间的耦合性;给程序带来侵入性

 

3、依赖倒置原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

 

依赖的三种方法:

构造函数传递依赖对象

setter函数传递依赖对象

接口的方法中传递依赖对象

 

依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

依赖倒置原则的核心思想是面向接口编程,我们依旧用一个例子来说明面向接口编程比相对于面向实现编程好在什么地方。

 

M依赖B,现在要使M依赖N,高层模块M就需要变动(不好)

解决方案:面向接口/抽象类

 

 

4、接口隔离原则

定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

概括 : 建立单一接口,不要建立臃肿庞大的接口,也就是接口尽量细化,接口中的方法尽量少

这个是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

 

比如我们设计一个手机的接口时,就要手机哪些行为是必须的,要让这个接口尽量的小

public interface Mobile {

 

public void call();//手机可以打电话 

public void sendMessage();//手机可以发短信 

public void playBird();//手机可以玩愤怒的小鸟? ----这条显然不是必须的,还可以拆

}

5、迪米特原则

定义:一个类应该尽量不要知道其他类太多的东西,不要和陌生的类有太多接触(只与直接朋友通信)。

朋友类:朋友类也可以这样定义:出现在成员变量,方法的输入输出参数中的类,称为朋友类。

 

6、开闭原则

定义 : 一个软件实体如类,模块和函数应该对扩展开放,对修改关闭

开闭原则无非就是想表达这样一层意思:用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了。当然前提是我们的抽象要合理,要对需求的变更有前瞻性和预见性才行。

转载地址:https://blog.csdn.net/jinpengncu/article/details/82254956 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:后端开发中的英语—每日一更
下一篇:idea maven路径maven_repository老是自己改成默认的路径C:\Users\Ad\.m2\repository

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月05日 09时01分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章