设计模式基础——面向对象设计原则(一)

一、何为面向对象设计原则

面向对象设计原则为设计出可维护复用代码而产生,是数之不尽的程序员的设计经验。这些设计原则蕴含在设计模式中,是设计模式的基础。


二、面向对象设计原则简介

面向对象设计原则有以下七种:

①单一职责原则(SRP: Single Responsibility Principle,):
又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于 汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的 内聚性原则发展出的。
所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。在软件系统中,一个类、模块或方法所承担的职责越大,那么它被复用的可能性就越小。单一职责原则是实现高内聚、低耦合的指导方针。
②开闭原则(OCP:Open-Closed Principle):
1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造(Object Oriented Software Construction)》中提出了开闭原则:软件实体应当对扩展开放,对修改关闭。
(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。
(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。 模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。
③里氏代换原则(LSP:Likov Substitution):
里氏代换原则由Barbara Liskov提出,其定义如下:如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都代换为O2时,程序P的行为没有变化,那么类型T2是类型T1的子类。
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
④依赖倒转原则(DIP:Dependency Inversion Principle):
依赖倒转原则的定义是: 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。其意思是程序应该面向抽象接口编程,而不是面向具体实现编程。
⑤接口隔离原则(ISP:Interface Segregation Principle):
客户端不应该依赖它不需要的接口,一个类对另一个的类的依赖应该保持在接口最小。每个接口都应该是一个承担相对独立的角色,做恰当多的工作,而不应使用单一的总接口。
⑥合成复用原则(CRP: Composite Reuse Principle):
又称为组合、聚合复用原则(CARP: Composition/Aggregate Reuse Principle)。其主要思想是:尽量使用对象组合/聚合,避免使用继承来达到复用的目的。
⑦迪米特法则(LoD: Law of Demeter):
又称为最少知识原则(LKP:Least Knowledge Principle)。主要思想是:一个对象应该尽量少地了解另一个对象,即减少两个对象之间的相互作用。

你可能感兴趣的:(设计模式,读书笔记)