设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)

原文:设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)

单一职责原则

单一职责原则,就一个类而言,应该仅有一个引起它变化的原因。

        如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,当变化发生时,设计会遭受到意想不到的破坏。事实上,我们完全可以找出来进行分类,分离。

        软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。其实要去判断是否应该分离出类来,也不难,那就是如果你能够想到多余一个的动机去改变一个类,那么这个类就具有都与一个的职责,就应该考虑类的职责分离。

开放-封闭原则

开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。
      这两个原则其实是有两个特征,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。

      无论模块是多么封闭,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对那种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。

      面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。这就是开放-封闭原则的精神所在。

      开放封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该对程序中呈现出频繁变化的那些部分做出抽象,然后,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。

依赖倒转原则

 依赖倒转原则,就是说抽象不应该依赖细节,细节应该依赖抽象。

      这话绕口,说白了,就是要针对接口编程,不要对试下编程。举个例子,无论电脑的主板、CPU、内存、硬盘都是在针对接口设计的,如果针对实现来设计,内存就要对应到具体的某个品牌的主板,那就会出现换内存需要把主板也换了的尴尬。

      所以说,PC电脑硬件的发展,和面向对象思想发展是完全类似的。这也说明世间万物都是遵循牟宗类似的规律,谁先把握了这些规律,谁就最早成为了强者。

      依赖倒转原则其实可以说是面向对象设计的标志,用那种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。

里氏代换原则

 里氏代换原则,子类型必须能够替换掉它们的父类型。

      只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

      比方说,猫是继承动物类的,以动物的身份拥有吃喝跑叫等行为,可当某一天,我们需要够牛羊也拥有类似的行为,由于它们都是继承动物,所以除了更改实例化的地方,程序其他处不需要更改。

        正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展,才使得开放--封闭的原则成为了可能。

迪米特原则

迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。

    迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。

    迪米特法则其根本思想,是强调了类之间的松耦合。在程序设计时,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。也就是说,信息的隐藏促进了软件的复用。

时间: 2024-10-28 01:05:47

设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)的相关文章

设计模式学习--面向对象的5条设计原则之开放封闭原则--OCP

一.OCP简介(OCP--Open-Closed Principle):Software entities(classes,modules,functions,etc.) should be open for extension, but closed for modification.软件实体应当对扩展开放,对修改关闭,即软件实体应当在不修改(在.Net当中可能通过代理模式来达到这个目的)的前提下扩展.Open for extension:当新需求出现的时候,可以通过扩展现有模型达到目的. C

深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP_javascript技巧

前言 Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单一职责SRP) The Open/Closed Principle(开闭原则OCP) The Liskov Substitution Principle(里氏替换原则LSP) The Interface Segregation Principle(接口分离原则ISP) The Dependency Inversion Pr

设计模式六大原则——开放封闭原则(OCP)

      什么是开闭原则?       定义:是说软件实体(类.模块.函数等等)应该可以扩展,但是不可修改.       开闭原则主要体现在两个方面:       1.对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况.     2.对修改封闭,意味着类一旦设计完成,就可以独立其工作,而不要对类尽任何修改.         怎么使用开闭原则?     实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定.让类依赖于固定的抽象,所以对修改就是封闭的:而

设计模式六大原则--里氏代换原则

       背景        上一篇我总结了一下依赖倒转原则,查了很多资料发现凡总结依赖倒转原则的时候,大多数人也会把里氏代换原则顺道也给总结了.Why?还是让我们先来看看里氏代换原则(Liskov Substitution Principle, LSP)吧.        定义        Functions that use pointers or referencesto base classesmust be able to use objects of derived class

《你必须知道的.net》读书笔记 007——2.3 开放封闭原则

       开放封闭原则,核心思想:软件实体应该是可扩展,而不可修改的.也就是说,对扩展是开放的,而对修改是封闭的.            体现在两个方面:      1.对扩展开放,意味着有新的需求和变化时,可以对现有代码进行扩展,以适应新的情况.      2.对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改.   ==        辛辛苦苦写好的代码,测试也通过了,就不要再改了嘛,一改动就可能发生错误,或者是不希望的修改,至少还需要在测试一遍吧.如果改一处

设计模式六大原则--依赖倒转原则

       背景        前段时间有同学感觉自己电脑内存不够用了想买个内存条,只看她在网上捣鼓了一会就搞定了.也没见她看内存条的具体型号是否可以在其电脑上使用等等知识.一时不得其解,网上查了查才知道电脑的硬件是面向接口设计的,最近正好在学习设计模式,我想这是不是和设计模式中的依赖倒转原则有点关系.下面就让小生带领大家详细了解一下"依赖倒转原则(Dependence Inversion Principle)"吧.        定义        1.高层模块不应该依赖底层模块,

开放-封闭 原则

开放-封闭原则:软件实体(类,模块,函数等等)应该可以扩展,但是不可修改   为适应不断变更的新需求,就及早的想办法应对发生更大改变的可能.最初编写代码时,假设变化不会发生.当变化发生时,我们就创建抽象来隔离以后发生的同类变化.比如:之前的加法程序,很快在一个client类中就能完成(http://www.cnblogs.com/zhangdongsheng/archive/2012/03/25/2417224.html).此时变化还没有发生,如果我们再加一个减法功能,你发现,增加功能需要修改这

依赖倒转原则

依赖倒转原则: 强内聚:像CPU一样,别的厂商木有办法造.因为看不见内部. 松耦合:像CPU的针脚一样,主板厂商知道怎么造主板能用cpu   依赖倒转原则:抽象不应该依赖结节,细节不应该依赖于抽象.说白了就是针对接口编程,而不是针对实现编程.   依赖倒转原则: 高层模块不应该依赖低层模块.两个都应该依赖抽象. 抽象不应该依赖结节.细节应该依赖抽象.   有些时候为了代码复用,一般会把常用的代码写成函数或类库.这样开发新项目时,直接用就行了.比如做项目时大多要访问数据库,所以我们就把访问数据库的

设计模式六大原则--迪米特法则

       背景        在学校学习时,可能因为某些事你得去其他二级学院的老师帮忙,大部分老师都是忙的(也许是的)很可能一件小事你要跑很多次.但是如果你这件事直接找的是其他学院的院长,并且院长同意帮忙的话这件事解决起来就容易多了.不知怎地最近老是瞎想感觉这件事又能和设计模式中的迪米特法则(Law of Demeter,LOD),也叫最少知识原则(Least Knowledge Principle,LKP)扯上关系,接下来就由小生带大家粗略的了解一下这个法则吧.        定义