设计模式-原则

       学习完大话设计模式,其中的六种原则是很重要的,我们知道设计模式是软件设计的思想,而不是软件技术。它重在使用接口与抽象类来解决各种问题,在使用这些设计模式时,我们应该遵守这六大原则。


单一职责原则:就一个类而言,应该仅有一个引起它变化的原因.即一个类只负责一项职责.

问题

Class负责R1R2两个不同的职责,当由于职责R1需求发生改变而需要修改Class时,有可能会导致原本运行正常的职责R2功能发生故障。

解决办法

遵循单一职责原则,分别建立两个类,Class1Class2.

Class1完成R1的功能,Class2完成R2的功能。这样不管修改哪一个类,都不会影响另一个类的职责发生故障。

不用单一职责原则时

 由于职责扩散(因为某种原因,职责R1被分化为粒度更细的职责r1r2)。遵循单一职责,需要将类Class分解为两个类Class1Class2,原本的程序已经写好了,这样做太浪费时间,所以简单的修改类Class,用它负责两个职责更加好。

遵循单一职责的优点:1、可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定比负责多项职责简单的多。

                                      2、提高类的可读性,提高系统的可维护性。

                                      3、变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

 

 

开放封闭原则:是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。

特征:

 

1、对于扩展是开放的。2、对于更改是封闭的。

问题

在软件的生命周期内,因为某些原因,需要对原有代码进行修改,这过程中可能会给旧代码中引入错误,也可能会使我们不得对整个功能进行重构,并且需要原有代码经过重新测试。

解决办法

利用开闭原则,尽量通过软件实体的行为来实现变化,而不是通过修改代码来实现变化。

依赖倒转原则:1高层模块不应依赖低层模块,两个都应该依赖抽象。

                              2抽象不应依赖细节,细节应该依赖抽象。

问题

ClassA直接依赖ClassB,假如将ClassA改为依赖ClassC,则必须通过修改ClassA代码来实现。

解决

ClassA修改为依赖接口IClassBClassC各自实现接口IClassA通过接口I间接与ClassBClassC发生联系,降低了修改ClassA的几率。

里氏代换原则:子类必须能够替换掉他们的父类型。

解释

一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。

 

迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

根本思想

强调了类之间的松耦合

优点

类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及

合成聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。

聚合表示一种弱的拥有关系,合成是一种强的拥有关系。合成的部分和整体的生命周期一样。

设计模式-原则_第1张图片



优点:有限使用对象的合成/聚合将有助于保持每个类呗封装,并集中在单个任务上。

总结:设计模式-原则_第2张图片

    设计模式原则再加上OOP三大属性,封装、继承、多态,我们就可以清楚的理解设计模式了。设计模式的核心原则是开闭原则,所有的原则都围绕着它进行展开。

你可能感兴趣的:(设计模式原则)