设计模式---设计原则(OCP,SRP...)

╄→尐↘猪︶ㄣ 提交于 2019-11-27 04:28:22

1、顺口溜:

开里和依单迪 合成聚合复用

面向对象中的五大设计原则:

solid: srp ocp lod isp dip

  1. srp:Single responsibility principle

  2. ocp:Open Closed Principle

  3. lod:Law of Demeter

  4. isp:Interface-Segregation Principle

  5. dip:Dependence Inversion Principle


2、开闭原则(OCP):

开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。

关于开放封闭原则,其核心的思想是:

软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

因此,开放封闭原则主要体现在两个方面:

  • 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

  • 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。


3、里氏替换原则(LSP):

父类可以由子类替换

里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。


4、依赖倒置原则(DIP):

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。


5、单一职责原则(SRP):

一个类一个职责,不应分配过多职责到一个类上

单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。

6、迪米特法则(LOD):

也叫最少知识原则,如果两个类之间没有必要直接通信,那么可以通过第三个类进行转发这个调用。

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.


    7、接口隔离原则(ISP):

    接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口。

    对于接口隔离原则,其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。

        具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

        接口有效地将细节和抽象隔离,体现了对抽象编程的一切好处,接口隔离强调接口的单一性。而胖接口存在明显的弊端,会导致实现的类型必须完全实现接口的所有方法、属性等;而某些时候,实现类型并非需要所有的接口定义,在设计上这是“浪费”,而且在实施上这会带来潜在的问题,对胖接口的修改将导致一连串的客户端程序需要修改,有时候这是一种灾难。在这种情况下,将胖接口分解为多个特点的定制化方法,使得客户端仅仅依赖于它们的实际调用的方法,从而解除了客户端不会依赖于它们不用的方法。

        分离的手段主要有以下两种:1、委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。2、多重继承分离,通过接口多继承来实现客户的需求,这种方式是较好的。


    8、组合/合成:

    表示强的拥有关系,合成指的是整体由部分组成,人是由四肢组成的,四肢和人的关系即是组合关系。


    9、聚合:

    表示弱的拥有关系,如,人和人群,即是一种弱的拥有关系 。

    A对象包含B对象,但B对象不一定属于A的一部分,区别于组合


    10、复用:

    字面理解是再一次使用、利用,指的是设计或代码可以复用到其它地方。

    同样一段代码可以被复用到不同的业务场景中去。


    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!