【设计模式总结】设计原则 - 木东驿站 - Powered by MoodBlog

CONTENT

【设计模式总结】设计原则

单一职责原则

定义:应该有且只有一个原因引起类的变更。

这个原则理解起来很简单,就是每个接口、类、方法只拥有一个职责,只负责一种类型的任务。比方说电脑制造过程中有个过程是组装,我们可以单独让一个类负责组装,而不是让把整个制造过程都放到一个类中。

但是这个原则在实际开发中是很难遵守的,因为如果严格遵守的原则,会让系统中的类过于分散,最后增加了系统的复杂性。所以对于类来说,我们要使其尽量符合单一职责原则,但不必吹毛求疵。对于接口和方法,一定要做到单一职责,不要让它们同时承担多个职责。

里式替换原则

定义:所有引用基类的地方必须能透明地使用其子类的对象。

这个原则其实就是说父类出现的地方,替换成子类系统不会发生任何错误,也就是让我们严格的遵守继承规则。

(1)子类必须完全实现父类的抽象方法,如果不能完全实现就不要用继承关系。

(2)子类可以有自己的个性,子类出现的地方未必能替换成父类。

(3)子类重载父类的方法时参数范围必须被放大。因为如果参数范围缩小的话,我们把一段代码中的父类对象替换成子类对象,传入具体参数时会优先匹配子类的方法,而这个方法是父类未定义的(因为这个方法和父类参数不同),这就有可能出现与父类不匹配的行为。所以此时就不能安全的替换了,违背里式替换原则。(在c++中这一条不存在,因为c++的重载只发生在同一作用域,不能是子类重载父类的方法,这样做只会导致父类的同名方法被隐藏)

(4)子类重写父类的方法时返回值范围必须相同或缩小。

返回值如果放大的话,也就是变成了上级父类类型,会与程序中要求返回的类型相违背。缩小就完全没问题了,缩小后的类型同样能表现出正确的行为。

依赖倒转原则

定义:

一、高层模块不应该依赖低层模块,两者都应该依赖其抽象。(模块间的依赖通过抽象发生,实际类之间不发生依赖关系)

二、抽象不应该依赖细节。

三 、细节应该依赖抽象。

依赖倒转原则其实就是告诉我们要面向接口而不是面向具体类进行编程。实现起来要遵守以下原则:

(1)每个类都尽量有接口或者抽象类。

(2)变量的表面类型尽量是接口或者抽象类。

(3)任何类都不应该从具体类派生。

(4)如果基类的某些方法已经实现,就不要在子类重写。

总感觉依赖倒转和里式替换在互相打脸……

迪米特法则

定义:一个对象应该对其它对象有最少的了解。

我们在设计一个类的时候,如果需要其它类参与进来,那么不要暴露太多信息,把对其它类的操作封装成公共方法,提供给高层模块调用,减少高层模块和底层模块之间的耦合度。简单点说就是:松耦合,强内聚。

开闭原则

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

简单来讲就是当有新的行为出现时,我们应该去扩展(增加新类、模块、函数)而不是在已有模块上修改。

如果我们修改原有代码,一旦出错的话,会发生连坏反应,影响到我们之前定义的行为,这对测试影响极大。而且对扩展开放可以增强软件的复用性,因为扩展就意味着把新模块拆分出来。

个快快 2018年11月14日 天气 晴

REMARKS

© 2018 MoodBlog 0.2 个快快 作品 | 参考主题: mathilda by fuzzz. | 鲁ICP备16047814号