设计模式五原则

(一)单一职责原则(单一功能原则)


一、由来:搞程序设计的都知道我们要写出的程序应该是高内聚低耦合的,但是很多耦合经常发生在不经意间,这个原因就是职责扩散:因为某些原因,某一职责被分化为颗粒度更细的多个职责(一个领导干了许多不该干的细节上的事情)

 

二、解决方法:把不同的职责分封到不同的类或模块里面。

 

三、、定义:就一个类而言,引起它变化的原因只有一个(职责是指类变化的原因)——一个类或模块的变化应该只有一个引起它改变的原因(原因:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这是一种耦合,会造成一种很脆弱的设计,形成牵一发而动全身的结果)

白话:功能要单一,专一

 

 

(二)开放——封闭原则

一、地位:是所有面向对象原则的核心

 

二、原因:软件设计本身所追求的目标就是封装变化、、降低耦合,开放封闭原则正是对这一目标的最直接的体现,其他原则很多时候是为实现这一目标服务的。

 

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

       白话:软件实体可以插入新的东西,但是不可以修改修改原来的代码

 

四、注意:无论模块是多么的封闭,都会有一些变化是无法封闭的,所以在设计时咱们要对设计的模块的变化封装做出选择,猜出最有可能发生的变化的种类,把这些最有可能发生的变化的种类进行抽象,让具体的变化依赖抽象,因为抽象不容易发生变化,具体则相反

 

 

(三)里氏代换原则
一、目的:是对开放——封闭原则的补充,实现开放——封闭原则的关键步骤就是抽象化。在里氏代换原则中,父类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对象实现抽象化的具体步骤的规范。

 

二、定义:子类必须能够替换掉他们的父类

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

 

三、意义:该原则使得继承复用成为了可能

        原因:只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也可以在父类的基础上增加新的行为,使得在没有修改的情况下就可以扩展。

 

 

(四)依赖倒转原则

一、来源:在面向过程的开发中,上层调用下层,上层依赖下层,当下层剧烈变动的时候,上层也跟着变动,这样会导致模块的复用性降低并且大大的提高了开发的成本。所以此时面向对象出现很好的解决了这个问题,让用户程序依赖抽象,实现的细节也依赖抽象,这样就算细节不断变化,只要抽象不变,客户程序不需要变化,这样就很大程度上降低了客户程序与实现细节的耦合度。

 

二、一句话:抽象不依赖细节,细节要依赖抽象,针对接口编程,不对实现编程

 

 

(五)迪米特法则:一个对象应当对其他对象有尽可能少的了解,不和陌生人说话,两个对象的沟通通过接口来实现

一:定义:

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

 

 

二:模式应用:调停者模式(中介者模式)、外观模式

 

三、优点:

每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

四、不足:

迪米特法则不希望类之间建立直接的联系。如果真的有需要建立联系,也希望能通过它的

友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。




五原则总结:这五种原则都是为了实现强内聚,松耦合。里氏替换原则让继承实现成为可能,为这一目标的实现打下了坚实的基础,强内聚,松耦合的直接体现是开放—封闭原则,里氏替换原则是对它的补充。

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值