六大原则和二十三模式是学习设计模式的主要内容,其中六大原则又是审核各个模式的标准和规范,对学习各种模式的理解起到很大的帮助作用。接下来我们就一起学习一下这六大原则。
1 单一职责原则
1.1 定义
就一个类而言,应该仅有一个引起它变化的原因。
1.2 特征
功能单一。
1.3 作用
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。单一职责通过对功能的单一化避免这种情况的发生。
1.4 目的
避免多职责之间造成的强耦合关系对其他功能的抑制。
2 开放—封闭原则
2.1 定义
软件实体可以扩展,但是不可以修改。
2.2 特征
A,对于扩展开放
B,对于更改封闭
2.3 作用
开放-封闭原则是面向对象设计的核心所在。无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不能完全封闭,设计人员应该先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化,等到变化发生时立即采取行动。遵循这个原则可以带来面向对象技术所声称的巨大好处,即可维护、可扩展、可复用、灵活性好。
2.4 目的
面对需求的改变可以保持相对稳定,即面对需求,对程序的改动是通过增加新的代码进行的,而不是更改现有的代码,提高程序的可拓展和可复用性,从而使得系统可以在第一个版本以后不断推出新的版本。
3 依赖倒转原则
3.1 定义
又称依赖倒置原则,抽象不应该依赖细节,细节应该依赖于抽象。
3.2 特征
A,高层模块不应该依赖低层模块。两个都应该依赖抽象。
B,抽象不应该依赖细节。细节依赖抽象。
3.3 作用
依赖倒转原则是面向对象设计的标志。不管用哪种语言来编写程序,编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,只要接口是稳定的,任何一个的更改都不用担心其他受到影响,使得无论高层模块还是底层模块都可以很容易被复用。
3.4 目的
谁也不依靠谁,除了约定的接口,大家都可以灵活自如。
4 里氏代换原则
4.1 定义
子类型必须能够替换掉它们的父类型。即要保证在软件里面,把父类都替换成它的子类,程序的行为没有变化。
4.2 特征
由于子类型的可替换性使得使用父类类型的模型在无需修改的情况下就可以拓展。
4.3 作用
A,使得继承复用成为可能。
B,使得开放—封闭原则成为可能。
5 合成/聚合复用原则
5.1 定义
尽量使用合成/聚合。尽量不要使用类继承。
5.2 特征
优先使用对象的合成/聚合,而不是类继承。
5.3 作用
有助于保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
5.4 目的
避免继承结构中由于系统的需要出现的类越来越多的弊端。
6 迪米特法则
6.1 定义
如果两个类不必彼此之间通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三周转发这个调用。
6.2 特征
重点强调类之间的松耦合。
6.3 作用
在类的结构设计上,每一个类都尽量降低成员的访问权限,这样类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。
总结
六大设计原则的规定是为了更好地实现程序的可维护性、可扩展性、可复用性、高灵活性。