【设计模式】漫谈六大原则

六大原则的起因:面向对象中封装、继承、多态三大支柱蕴含了用抽象来封装变化,降低耦合,实现复用的精髓。

封装:隐藏内部实现,保护内部信息。

继承:实现复用,归纳共性。

多态:改写对象行为,实现更高级别的继承。

要实现这些目的,就必须遵守一些原则:封装变化、对接口编程、少继承多聚合等等总结这些,归纳出六大原则

单一职责原则(SRP)

定义:就一个类而言,应该仅有一个引起它变化的原因。

翻译:一个类只有一个职责。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计。当变化发生时,设计会遭受到意想不到的破坏。

软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

如果你能想到多余一个的动机去改变一个类,那这个类就具有多余一个的职责。

开放-封闭原则

定义:软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。

这个原则的两个特征:对于扩展是开放的,对于更改是封闭的。

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

在我们最初编写代码是,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。

面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

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

依赖倒转原则:

定义:A:高层模块不应该依赖低层模块。两个都应该依赖抽象。

B: 抽象不应该依赖细节。细节应该依赖抽象。(针对接口变成,不要对实现编程)

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

里氏代换原则(LSP)

定义:子类型必须能都替换它们的父类型。

一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成他的子类,程序的行为没有变化。

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

由于里氏代换原则,使得开放-封闭成为了可能。

由于子类型的可替代性才使得父类类型的模块在无需修改的情况下可以扩展。

迪米特法则(LoD)

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

迪米特法则的根本思想强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

合成/聚合复用原则(CARP)

定义:尽量使用合成/聚合,尽量不要使用类继承。

聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

时间: 2024-10-14 05:12:50

【设计模式】漫谈六大原则的相关文章

设计模式的六大原则

设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案:遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,不会使职责P2发生故障风险:同理,当修改T2时,也不会使职责P1发生故障风险. 说到单一职责原则,很多人都会不屑一顾

设计模式之六大原则(转载)

关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来. 原作者博客链接:http://blog.csdn.net/LoveLion/article/category/738450/7 一.单一职责原则 原文链接:http://blog.csdn.net/lovelion/article/details/7536542 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大

要想富先练功,设计模式之六大原则

设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式使代码编写真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 设计模式的六大原则是,开发人员必须要掌握的,在开发过程中遵循这些原则,将极大地提升我们的代码质量和开发效率. 下面我们简单回忆一下,这六大原则.如果您没接触过设计模式,那么强烈建议您学习下相关知识. 单一职责:一个类只负责一项职责

【设计模式的六大原则】

设计模式的六大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.所以一句话概括就是:为了使程序的扩展性好,易于维护和升级.想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点. 2.里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的

设计模式之六大原则——接口隔离原则(ISP)

设计模式之六大原则——接口隔离原则(ISP) 转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 Interface Segregation Principle    定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 我们可以把这两个定义概括为一句话:建立单一接口,不要建立臃肿庞大的接口.再通俗一点讲:接口尽量细化,同时接口中的方法尽量少. 提供给每个模块的都应该是单一

【设计模式】六大原则

设计模式的六大原则: * 开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.简言之,是为了使程序的扩展性好,易于维护和升级.想到达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点. * 里氏代换原则(Liskov Substitution Principle) 里氏代换原则是面向对象设计的基本原则之一.里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现

无废话设计模式(0)--设计模式的六大原则

设计模式的六大原则: 1.单一职责原则:对于一个类,应该只有一个引起它变化的原因: 2.里氏替换原则:子类必须能够替换掉他们的父类型: 3.开放封闭原则:程序的对象应该可以扩展,但不应该可以修改: 4.依赖倒转原则:高层模块不应依赖于底层模块,两者都应依赖于抽象:抽象不依赖于集体细节,而细节应该依赖于抽象: 5.合成/聚合复用原则:尽量不要使用类继承,而尽量使用合成/聚合: 6.迪米特法则:如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用:如果其中一个类需要调用另外一个类的某个方法

关于设计模式的六大原则

目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则 设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案

《大话设计模式》——六大原则

谈到设计模式,它是骨灰级任务给我们总结的经验,也是我们对面向对象编程学习的深入.而设计模式中的六大原则,则是我们在学习它时要遵循的规则.下面宏观的看一看六大原则的导图吧! 一.导图分析 二.导图分析 1.单一职责:就一个类而言,应该仅有一个引起它变化的原因. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案:遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P