设计模式六大原则

 一、开闭原则

是什么:对扩展开放,对修改封闭。可以理解为,可以根据需求随意增加新的类,但不要对原有的类进行修改。

用处:1.可扩展度高,灵活。可以通过新增模块满足不断变化的需求。2.可维护性强,无需修改代码。可以保证变化的系统有一定的稳定性和延续性

实现:开闭原则的核心思想在于抽象,对于不变的部分,把它抽象成不变的接口,变化的部分需要进行评估和分类,每一个可变的 因素都要进行单独的封装。例如原本有个商品类,现在推出活动,需要对商品进行打折处理,可以通过新建一个打折商品类继承商品类的形式来实现。

二、单一职责原则

是什么:就一个类而言,应该仅有一个引起他变化的原因。防止相同类型的职责,分离到不同的类中,并且同一个类无需编制多余的职责,符合高内聚低耦合的标准。

用处:1.有助于清晰的理清设计与编码的思路。2.有助于简化维护,编码,测试的流程。3.复杂问题简单化,有利于代码的重用。4.职责之间消除耦合后有利于系统的扩展。

实现:1.从面向对象的角度分析,按照对象的属性,运动规律的相似性来确定职责。2.从业务功能的角度进行分析,例如将增删改封装成一个类。并且要注意类的大小范围要适中。范围过大职责过多,就会造成这个类很难维护

三、里氏代换原则

是什么:子类必须可以替换掉他们的基类(面向对象语言中的继承所遵循的)

用处:提高代码的开放性

实现:通过继承实现

四、依赖倒换原则

是什么:1.高层模块不应该依赖于底层模块,二者都应该以来于抽象。在设计系统时,需要运用抽象来分析,而不是一开始就关注类的细节。2.要针对接口编程,不要针对实现编程。通过接口与抽象类进行各种变量,参数,方法的声明,并且禁止实现类去做以上声明。

用处:提高系统的灵活性和扩展性

实现:1.从实现抽象类的角度分析,需要保证引用‘基类’的地方,可以修改成其子类。2.从层次关系角度进行分析,需要定义清晰的层次关系,使每个层次通过接口的方式进行。3.从对象构造的角度进行分析,如果创建的是动态的对象,则使用依赖倒换,如果是静态的具体类并且变化率很低,则我们无需再穿件基类去继承,以规避维护多余代码的风险。

五、接口隔离原则

是什么:分离客户程序和接口1,不应该强迫客户依赖于他们不用的方法。2.一个类对另一个类的依赖性应当建立在最小的接口上。

用处:实现接口隔离原则减少代码的冗余和接口修改的频率(有点类似于单一职责原则)

实现:1.从逻辑角度考虑接口,我们也可以把某一类功能也设计成接口。2.根据场合和调用者的情况,消除无关的方法。3.对客户程序进行有效的区分,并对对应的接口进行变化。

六、迪米特法则

是什么:又叫做最少知识原则,就是一个对象应当对其他对象有尽可能少的了解,不必与不相识的人直接联系(类似代理模式)1.狭义上讲,如果两个类不必彼此直接通信,那么这两个类不应当直接的相互作用,如果其中一个类需要调用另一个类的方法,可以通过第三者转发这个调用。2.广义上讲,一个模块设计的好坏,一个重要的标识就是该模块在多大程度上讲自己的内部数据与现实的有关细节隐藏起来。

用处:1.有利于降低类之间的耦合,由于类之间去除了依赖关系,则各软件功能模块之间相互独立。2.如果系统需要扩展,则更加符合开闭原则对修改关闭的要求。3.将内部数据与实现细节隐藏,使各个功能子模块远离耦合,从而提高代码的重用性和可维护性。

实现:1.对类进行分类设计时,需要创建低耦合的层次关系从而达到高度重用的效果。2.每个类之间要降低成员之间的访问程度,尽量降低它的访问权限。3,.尽量把类设计成不变的类,以方便功能的实现。4.与依赖倒换相结合。过度的使用迪米特会产生大量的中间类,将会使系统维护变得复杂。

原文地址:https://www.cnblogs.com/RUN-TIME/p/6884680.html