温故而知新之——设计模式(二)

软件开发中,为了提高软件系统的可维护和可复用性,增加软件的可扩展性和灵活性,开发人员尽量根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

开闭原则(Open Closed Principle)由Bertrand Meyer提出。软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension , but closed for modification)。

 

李氏替换原则(Liskov Substitution Principle , LSP)是Liskoy在《数据抽象和层次》里提出,继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure that any property proved about supertype proved also holds for subtype objects ),李氏替换原则通俗的讲,子类可以扩展父类的功能,但不可改变父类 原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增的功能外,尽量不要重写父类的方法。

 

依赖倒置原则(Dependence Inversion Principle , DIP)是Object Mentor公司总裁Robert C.Martin提出的,高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。(High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstraction should not depend upon details. Details should depend upon abstractions),依赖倒置原则是实现开闭原则的重要途径之一,他降低了客户于实现模块之间的耦合。依赖倒置原则的目的是通过面向接口的编程来降低类之间的耦合性。

 

单一职责原则(Single Responsibility Principle , SRP)由Robert C.Martin在《敏捷软件开发:原则、模式和实践》提出。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。

 

接口隔离原则(Interface Segregation Principle , ISP)Robert C.Martin的定义是,客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上(The dependency of one class to another one should depend on the smallest possible interface)。

 

 

迪米特法则(Law of Demeter , LoD)又叫作最少知识原则(Least Knowledge Principle , LKP)由Lan Holland提出,只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无需直接通讯,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

 

合成复用原则(Composite Reuse Principle , CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle , CARP).它要求在软件复用时,尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如使用继承关系,则必须严格遵循李氏替换原则。

 

总结:

以上介绍了7中设计原则,分别为开闭原则、李氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则和合成复用原则。其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;李氏替换原则则告诉我们不要破坏继承关系;依赖倒置原则则告诉我们要面向接口编程;单一职责原则则告诉我们实现类要职则单一;接口隔离原则则告诉我们要在设计接口的时候要精简单一;迪米特法则则告诉我们要降低耦合度;合成复用原则则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。

多说一句,这些概念看一遍懂了就懂了,看不懂也别纠结。不必在这些概念上太过纠结。经验上升到理论依据,需要大量的实践和反复的论证。接下来咱就准备一个一个来看具体的设计模式。

-------------------------------------------------------------------------------------------------------------------

人生的路上先易后难。道路会越走越窄,因为别人也都很容易。 所以竞争就会越来越激烈。相反人生的路上,先难后易。这才是成功之道,困难的开始,往往帮你把竞争对手挡在了门外。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蒋聊技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值