设计模式之六大设计原则

在上篇博文中提到了开放—封闭原则,没有细谈,这次我们来总结一下设计模式的几大原则。

1开放—封闭原则:是指软件实体(类、模块、函数等)应该可以扩展,但是不可修改。

对原则的理解:开闭原则是最具有理想主义色彩的一个原则,它是面向对象设计的终极目标,下面所要介绍的几个原则可以看成是为了符合开闭原则所作的努力和解决办法。对于开闭原则通俗的理解就是,能不改就不改,能少改尽可能的少改。周所周知,物质是运动的,世界是变化的,想要让一个事物永恒不变是不可能的,所以要想让软件绝对符合开闭原则是不可能的。

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

通俗来讲,就是一个类或者是一个模块只干一件事,或者说这个类或者模块只扮演一种角色,它只需将自己负责的活儿干好就行,其他的一概不管,绝对不能瞎掺和。比如我们在做软件的时候,定义了一个类是负责连接数据库的,至于连接上之后的数据操作就交给其他的函数去做,别都自己揽过来,到时候万一要换数据库那就麻烦了。

3依赖倒转原则:A 高层模块不应该依赖底层模块。两个都应该依赖抽象。B 抽象不应该依赖细节,细节应该依赖抽象。

通俗来说,就是要针对接口编程,不要针对实现编程。在面向过程的软件开发时,为了能够实现代码复用,通常会吧常用的一些代码写成函数,大量的函数就组成了函数库,这样在做新的项目时,就可以去调用这些底层的函数,这就是所谓的高层模块依赖底层模块。而我们要达到的目的是高层模块和低层模块没有很强的耦合性,任何一方都可以很容易的被复用,这样我们就要想办法对他们之间的接口进行设计和编程,在复用的时候只需修改接口或者抽象类即可。

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

这个原则的定义很短,相信应该不难理解,说白了就是一个软件实体如果使用的是一个父类的话,那么将父类都替换成它的子类,则程序依然能够编译通过,并且正常运行。可以说里氏代换原则是继承复用技术的基础。举个例子,动物类为父类,猫,狗,牛,羊为其子类,当我们实例化一个动物类的对象:动物 animal= new 猫()后,猫具有了父类动物的吃喝拉撒等方法,而当用狗替换掉猫即:动物 animal =new 狗(),依旧可以编译运行,没有任何不和谐的地方。这就是里氏代换原则的体现。

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

对原则的理解:迪米特法则有一个别名叫做最少知识原则,其核心的思想就是尽可能的降低类与类之间的耦合性,说白了就是不要和陌生类交流,就如同我们要找人办事一样,能帮得了你的人,你不认识,那么你就会找一个你认识的同时对方也认识的人做中间人,让这个中间人来帮你传达你的意思,这样就能很好地完成你想要做的事。

6合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。

所谓聚合表示的是一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。在编程中优先使用对象的合成/聚合将有助于保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

我们在进行软件设计的时候,尽量遵循以上原则,力争写出可维护,可复用,可扩展,灵活性好的代码。

设计模式之六大设计原则,布布扣,bubuko.com

时间: 2024-11-03 21:22:38

设计模式之六大设计原则的相关文章

设计模式小结——六大设计原则

设计模式是一套由软件界前辈们总结出的可以反复使用的编程经验,旨在提高代码的可重用性,提高系统的可维护性,以及解决一系列复杂问题.设计模式包括6大设计原则和23种种设计模式.6大设计原则:单一职责原则SRP 应该有却仅有一个原因引起类的变更,即类最好只实现一种功能.高内聚. 单一职责的实现方式是一个职责一个接口. 单一职责适用于类和接口,同样适用于方法,一个方法也应该只做好一件事.里氏替换原则LSP 所有能使用父类的地方必须能透明地使用其子类的对象. 子类必须完全实现父类的方法,如果子类不能完整实

C#设计模式:六大设计原则

面向对象的典型原则 可以划分两类:面向类的和面向包. 面向类的包括: SRP--单一职责原则. OCP--开放封闭原则. LSP --里氏替换原则. DIP--依赖倒置原则. ISP--接口隔离原则. 面向包的包括: 强调的是包的内聚性设计要求->REP--重用发布等价原则. CCP--共同封闭原则. CRP--共同重用原则. 针对是包间耦合性要求->ADP--无环依赖原则. SPP--稳定依赖原则. SAP--稳定抽象原则. 六大设计原则: 单一职责原则 SRP-- Single Respo

设计模式之六大设计原则(一)

6大设计原则   单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则   1 单一职责原则(Single Responsibility Principle)      单一职责,简称SRP.单一职责的定义是:应该有且仅有一个原因引起类的改变.单一职责最难划分的就是职责,一个职责一个接口,但是职责的划分因项目而异.对于接口,我们在设计的时候一定要做到单一,但是对于实现类尽量做到只有一个原因引起变化.实现类生搬硬套单一职责会引起类的剧增.   2 里氏替换原则(Liskov

php设计模式之六大设计原则

  1.单一职责 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 场景:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 修改:遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,不会使职责P2发生故障风险:同理,当修改T2时,也不会使职责P1发生故障风险. 优点: 1).可以降低类的复杂度,一个类只负责一项职责,逻辑简单

设计模式中的六大设计原则之三,四

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

设计模式中的六大设计原则之一,二

最近在学习设计模式方面的知识,首先接触到的是设计模式中的六大设计原则: 1.单一职责原则: 2.里氏替换原则:3.依赖倒置原则:4.接口隔离原则:5.迪米特法则:开闭原则.下面我来讲讲我对这六大设计自己的理解,如有欠缺地地方,请大家及时指出啊...   1.单一职责原则:应该有且仅有一个原因引起类的变更.通俗的说,即一个类只负责一项职责.下面我们举一个具体的例子来说明一下什么是单一职责原则.电话通话的时候有4个过程发生:拨号,通话,回应,挂机,首先看下面这样一个借口,如图1所示: 图1. 我们来

了解设计模式先从六大设计原则说起

了解设计模式的朋友们,想必都听说过"六大设计原则"吧.其实最经典的 23 种设计模式中或多或少地都在使用这些设计原则,也就是说,设计模式是站在设计原则的基础之上的.所以在学习设计模式之前,很有必要对这些设计原则先做一下了解. GoF(四人帮),传说中的四位大神们,他们联手搞出了一套设计模式,堪称 OOD(面向对象设计)的经典之作!震惊了整个软件开发领域.但这四个老家伙非常怪异,总是喜欢显摆一些高深的理论,甚至有时候不说人话,十分让人费解. 除了最经典的六大设计原则以外,还有一些其他的设

[设计模式]之零:六大设计原则

设计模式系列目录 单一职责原则 Single Responsibility Principle - SRP 就一个类而言,应该仅有一个引起它变化的原因. 假设现在要在iPhone上做一个图片编辑工具.功能有裁剪图片,旋转图片,缩放移动照片等等. 呐,我们可以写一个功能集类,然后把这些所有操作视为功能集的一部分,把代码全部写进这个类里面. 这么看来似乎可以,因为这是作为一个单独的模块嘛,把相关功能写进一个工具类里,用哪个功能调用哪个函数就好了.但这带来了一个问题就是这个工具类包含过多功能显得非常臃

浅谈Java六大设计原则

笔者刚接触设计原则的时候,觉得一头雾水,不知道他有什么用.在经历了一段时间的代码加上了解Java设计模式之后.笔者忽然觉得自己以前写的代码就是一堆*.所以,笔者认为设计原则和设计模式对于软件编程设计(非码农)来说是至关重要的事情.相信很多学习编程的人,和我有同样的感受. 我对设计模式和设计原则的理解是:如果把程序员比作武侠,那么设计模式就是修炼内功的易筋经,设计原则就是修炼内功的心法总纲,而具体的技术实现(代码编写)就是罗汉拳.如果你只想自保,那么会罗汉拳就可以了(能够用代码实现功能),不过如果