【心得】无瑕的程式码 - 敏捷完整篇

六大设计原则可以应用在各种程式语言的开发,觉得非常有用,心得记录如下

SRP:单一职责(Single Responsibility Principle)

对像不应该承担太多职责,唯有专注,才能保证对象的高内聚。

单一职责原则还有利于对象的稳定;对象的职责总是要提供给其他对象调用,从而形成对象与对象的协作,由此产生依赖关係。对象的职责越少,则对象之间的依赖关係就越少,耦合度减弱,受其他对象的约束与牵制就越少,从而保证了系统的可扩展性。

例如,在媒体播放器中,可以在MediaPlayer类中定义一组与媒体播放相关的方法,如Open()、Play()、Stop()等。这些方法从职责的角度来讲,是内聚的,完全符合单一职责原则中"专注于做一件事"的要求。如果需求发生扩充,需要我们提供上传、下载媒体文件的功能。那么在设计时,就应该定义一个新类如MediaTransfer,由它来承担这一职责;而不是为了方便,草率地将其添加到MediaPlayer类中。

OCP:开放封闭

开放是指对扩展开放,封闭是指不必对原有模块进行修改。

个人认为要达到OCP,关键是抽象化,可以定义一个或多个介面或抽像类,规定所有具体类必须实现的方法作为抽象层,这个抽象预见了你的系统或模块将来的扩展,因此在任何扩展情况下都不会改变。这就使得系统的抽象层不需要修改,从而满足了OCP中对修改关闭的原则。但是由于有具体实现的类可以扩展来改变系统的行为,所以系统的设计是开放的,满足了OCP中扩展的要求。

LSP:Liskov替换

继承的优点是大大提升了代码的複用度,但是缺点也同样明显:增加了对象的耦合程度,破坏了程序的封装性,导致程序的可移植性变差。

Liskov替换原则的目的是增强程式的健壮性,简单的说,即父类出现的地方子类也可以出现,并且将父类用子类替换后,也不会产生任何问题。然而,需要注意的是里氏替换原则反过来使用是不行的,子类出现的地方,父类未必适用。

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

子类必须完全实现父类的方法子类可以拥有自己的个性:有自己的方法和属性,也可以重写(Override)或重载(Overload)父类的方法覆盖或实现父类方法时输入参数可以被放大覆盖或实现父类方法时输出结果可以被缩小覆盖或实现父类方法时输出结果可以被缩小

DIP:依赖反转

解除高阶模组(Caller)与低阶模组 (Callee)的耦合关係,使高阶模组不再直接依赖低阶模组模组间要依赖抽象,不要通过具体的实现类。依赖关係通过接口(抽象)进行编程,这就降低客户与实现模块间的耦合。(接口或抽像类不依赖于实现类,实现类依赖接口或抽像类面向接口编程OOD )包含三层含义高层模组不应依赖于低层模块,两者都应该依赖其抽象抽像不应该依赖细节细节应该依赖于抽象高层模组、低层模组低层模组:每个逻辑的实现都是原子逻辑组成,不可分割的原子逻辑就是低层模组。一般和具体的实现相关高层模组:原子模块再组装就是高层模块,一般和业务逻辑相关何为反转依赖正置:类间的依赖是实实在在的实现类间的依赖,面向实现依赖反转:编程就是对现实世界事务进行抽象,然后根据系统设计产生对抽象的依赖,代替事物间的依赖

ISP:介面隔离

隔离定义客户端不应该依赖他不需要的接口类间的依赖关係应当建立在最小的接口上

为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模组提供定制服务,才能建立最小的依赖关係。

提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章