设计模式之6大设计原则全新解读

一.“单一职责”原则(Single Respnsibility Principle) SRP

单一职责原则的定义是:应该有且仅有一个原因引起类的变更。

单一职责原则的好处:

1、类的复杂性降低,实现什么职责都有清晰的定义;

2、可读性提高,复杂性降低,那当然可读性就提高了;

3、可维护性提高,可读性提高,那当然更容易维护了;

4、变更引起的风险降低,变更是必不可少的,如果一个接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。

 

单一职责原则适用于接口,类,也同样适用于方法,什么意思呢?一个方法尽可能去做一件事情。比如一个方法“修改用户密码”,不要把这个方法放到“修改用户信息”方法中,这个方法的颗粒很粗。

 

对于单一职责,给予的建议是:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

 

注意:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。

 

二.“里氏替换”原则(Liskvo Substitution Principle) LSP

里氏替换原则的定义是:所有引用基类的地方必须能透明地使用到其子类的对象。

 

里氏替换原则的好处:

1、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;

2、提高代码的重用性;

3、子类可以形似父类,但又异于父类,“龙生龙,凤生凤,老鼠生来会打洞”是说子拥有父的“种”,“世界上没有两片完全相同的叶子”是指明子和父的不同;

4、提高代码的可扩展性,实现父类的方法就可以“为所欲为”了,可以看到很多开源框架的扩展接口都是通过继承父类来完成的;

5、提高产品或项目的开放性;

 

当然继承也是有缺点的,缺点如下:

1、继承是浸入性的。只要继承,就必须拥有父类的所有属性和方法;

2、降低代码的灵活性。子类必须拥有父类的所有属性和方法,让子类自由的世界中多了些约束;

3、增强了耦合性。当父类的常量、变量和方法被修改时,必须要考虑子类的修改,而且是在缺乏规范的环境下,这种修改可能带来非常糟糕的结果----大片代码需要重构。

 

注意:如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组          合等关系代替继承。里氏替换原则可以正着用,但是不能反着用,在子类出现的地方,父类未必就可以胜任。

 

里氏替换原则为良好的继承定义了一个规范:

1、子类必须完全实现父类的方法;

2、子类可以有自己的个性;

3、覆盖或实现父类的方法时输入参数可以被放大;(子类中方法的前置条件(即传入参数类型)必须与超类中被覆写的方法的前置条件相同或更宽松)

4、覆写或实现父类的方法时输出结果可以被缩小;

三.“依赖倒置”原则(Dependence Inversion Principle) DIP

依赖倒置原则在java语言中的表现是:

1、模块间的依赖通过抽象发生,实现类之间不能发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

2、接口或抽象类不依赖于实现类;

3、实现类依赖接口或抽象类;

      更加精简的定义就是“面向接口编程”------OOD的精髓之一。

依赖倒置原则的好处:

依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

  

注意:设计是否具备稳定性,只要适当地“松松土”,观察“设计的蓝图”是否还可以茁壮地成长就可以得出结论,稳定性较高的设计,在周围环境频繁发生变化的时候,依然可以做到“我自岿然不动”。

 

时间: 2024-08-03 23:18:59

设计模式之6大设计原则全新解读的相关文章

设计模式之6大设计原则

设计模式之6大设计原则 原则一:单一职责原则(Single Responsibility Principle SRP) 定义:There should never be more than one reason for a class to change.(应该有且仅有一个原因引起类的变更) 好处: 1.类的复杂性降低,实现什么职都有清晰明确的定义: 2.可读性高,负责性降低,当然可读性就提高了: 3.可维护性提高,可读性提高,自然就更容易维护了: 4.变更引起的风险降低,变更是必不可少的,如果

设计模式之_6大设计原则(转)

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

设计模式开篇——7大设计原则

七大设计原则 开闭原则:是设计模式的总原则.开闭原则就是说对拓展开放,对修改关闭,模块应该在尽量不修改代码的前提下进行拓展.开闭原则要求我们尽量通过拓展来实现变化,尽可能少地改变已有模块. 提高代码复用性 提高代码可维护性 单一职责原则:简单来说就是保证设计类.接口.方法做到功能单一,权责明确.指的是一个类或者模块有且只有一个改变的原因. 单一职责可以降低类的复杂性.提高代码可读性.可维护性 里式替换原则:所有引用基类的地方必须能够透明地使用其子类的对象 里式替换可以提高代码复用性.子类继承父类

设计模式一 6大设计原则

0.总图: 1.开闭原则: 总原则. 含义:一个软件实体 如类.模块和函数应该对扩展开发,对修改关闭. 提高扩展性. 2.单一职责 只有一个原因 引起变化.每个类应该实现单一职责. 3.里氏替换原则 开闭原则的补充 所有应用基类对地方,必须能透明地使用其子类对象 > 子类必须完全实现父类的方法 >  子类可以有自己的实现 > 覆盖或实现父类的方法时,输入参数可以被放大 > 覆写或者实现父类的方法时,输出结果可以被缩小 4.依赖倒置原则 开闭原则的基础 即面向接口编程.依赖抽象,不依

设计模式——6大设计原则

1.单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. 单一职责的定义是:有且仅有一个原因引起类的变更. 单一职责原则要求一个接口或者一个类只有一个原因引起变化,也就是说一个接口或类只有一个职责,它就负责一件事情. 建议是:接口一定要做到单一职责,类的世界尽量做到只有一个原因引起变化.2.里氏替换原则 里氏替换原则的英文名称是Liskov Substitution Principle,简称是LSP. 里氏替换原则的定义:所有引用基

6大设计原则详解(一)

1. 单一职责原则(SRP) (1)概念 单一职责原则的定义是:应该有且只有一个原因引起类的改变,即一个类只负责一个职责. 比如让类C负责两个不同的职责:职责P1,P2.当由于职责P1需求发生改变而需要修改类C时,有可能会导致原本运行正常的职责P2功能发生故障. (2)举例 关于用户管理的一个类按如下类图来设计: 很显然,用户的属性和行为没有分开,按照单一职责原则,应该将其重新拆封成两个接口:用户属性接口IUserBO,用户行为接口IUserBiz. 分清职责之后的代码如下: ...... IU

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

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

JAVA设计模式总结之六大设计原则

从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇看完,脑子里面已经能够对绝大多数的设计模式能够说出其核心思想且可以画出类图也知道应用场景,算是一个进步,但可能还不能够特别熟练的使用,可能需要多多巩固和强化使用才能够完全理解设计模式的精髓所在.学习期间收获还是不少的: 1.从只听过设计模式到学习了所有的设计模式,并写了不少设计模式的博客,在公司期间

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

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