智取设计模式之六大原则

      本篇文章主要是总结一些概念性的知识点。


一、前言

      在编程之中,无论是面向过程还是面向对象编程,两个或两个以上的模块之间的配合与相互影响的一种度量称为耦合,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。而内聚是描述模块内的功能联系,从功能角度来度量模块内的联系,一个好的内聚模块应该恰好做一件事。在软件工程中,低耦合高内聚是判断设计好坏的标准。

      1.低耦合:就是让每个模块尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。

      2.高耦合:高耦合的类很难独立地被复用,而且改变或删掉一个类,就必须理解和改变其他许多类。这样的系统是一个很难学习、移植和维护的密集体。

      3.高内聚:就是指一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

      那么低耦合、高内聚有什么好处呢?事实上,短期来看,并没有明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会称为业务发展的障碍。[百度百科]

      

二、单一职责

      通过名字,就能明了单一职责原则,如果职责过多就会造成高耦合,那么当一项职责发生变化时就可能会消弱或抑制这个类,会发生意想不到的破坏。所以:即一个类只承担一项职责。

      在实际开发中当自觉的去遵守这一原则,不能因为图省事而违背,不然会使类会越来越臃肿。

      单一职责原则也就是我们前面所说的高内聚,就是指一个软件模块是由相关性很强的代码组成,只负责一项任务。


三、里氏代换原则

      定义:子类必须能够替换掉它们的父类。也就是说任何基类可以出现的地方,子类一定可以出现,而且察觉不出来父类与子类的区别,程序的功能不会受到影响。

      在使用时尽量把父类设计为“抽象”或“接口”,子类去实现父类的方法,同时子类可以添加自己的方法,来完成新的功能。也满足了开闭原则。


四、依赖倒置原则

      不管高层模块还是低层模块,它们都依赖于抽象类或接口,只要抽象类或接口稳定,那么任何一个的改变都不用担心其他受到影响,这使得无论高层模块还是低层都可以很容易地被复用。也就是面向接口编程。要注意的时,在使用继承时应遵循里氏代换原则。这样就降低了各个模块间的耦合。

      1.定义:

      高层模块不应该依赖于低层模块,它们都应该依赖于抽象类或接口。

      抽象不应该依赖于具体实现,具体实现应该依赖于抽象。


五、接口隔离原则

      一个类不应该依赖它不需要的接口,使用多个专门的接口比使用单一的总接口要好。但要有限度,如果过小,则会造成接口数量过多,使设计复杂化。


六、迪米特法原则

      1.定义:

      一个对象应该对其他对象保持最少的了解。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的模块功能独立,相互之间不存在(或很少有)依赖关系。所以两个类不必彼此直接通信,那么这两个类就不应该当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。

      迪米特法原则根本思想就是强调了类之间的低耦合,在设计模式中外观模式(也可以称为门面模式)和中介者模式(也可以称为调停者模式)实际上就是迪米特法原则的应用。

      2.缺点:

      在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。

      遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。


七、开闭原则

      1.定义:

      开闭原则是面向对象设计中“可复用设计”的基石,是最重要的原则之一,其他很多的设计原则都是实现开闭原则的一种手段,文中提到的里氏代换原则,依赖倒置原则,接口隔离原则,迪米特法原则以及抽象类、接口等等,都可以看作是开闭原则的实现方法。

      2.好处

      可复用性好:可以在软件完成以后,仍然可以对软件进行扩展,加入新的功能,非常灵活。因此,这个软件系统就可以通过不断地增加新的组件,来满足不断变化的需求。

      可维护性好:由于对于已有的软件系统的组件,特别是它的抽象底层不去修改,因此,我们不用担心软件系统中原有组件的稳定性,这就使变化中的软件系统有一定的稳定性和延续性。[百度百科]

      


八、结尾

      以上知识点均来至以下:

      《百度百科》

      《大话设计模式》

      《设计模式:可复用面向对象软件的基础》

      网上一些其他前辈们总结的经验,比较好的是:设计模式六大原则 http://www.uml.org.cn/sjms/201211023.asp


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值