设计模式学习——六大原则
Posted <天各一方>
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式学习——六大原则相关的知识,希望对你有一定的参考价值。
文章目录
1.单一职责原则
-
有且仅有一个原因引起类的变更。
合理的职责分解,相同的职责放到一起,不同的职责分解到不同的接口和实现中去,这个是最容易也是最难运用的原则,关键还是要从业务出发,从需求出发,识别出同一种类型的职责
单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责。
比如说一个权限类,就只负责权限内的事情,不要去干涉登录或者角色相关的类,也不要把权限的事情放到其他类里面。否则,相关的代码分散在系统的各个地方,要维护的代码量过大,随着系统的扩张,维护的代码也会成几何增长。
总结:控制粒度大小,将对象解耦,提高内聚性。
2.开闭原则
-
模块、类和函数应该对扩展开放,对修改关闭。
针对提供方,对扩展开放,针对调用方,对修改关闭。
开闭原则是编程中最基础,最重要的设计原则,只要是面向对象编程,在开发时都会强调开闭原则
开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的 工具和方法,而开闭原则才是其精神领袖。依照java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类
一个软件实体的任何变更,不应该是建立在修改的基础上,而是应该对软件实体进行扩展来达到变更的目的。
总结:对扩展开放,对修改关闭。
3.里氏替换原则
-
派生类必须完全可替代其基类。
里氏替换原则告诉我们,在软件中将一个基类对象替换成子类对象,程序将不会产生任何错误和异常。但是反过来就不行了,有子类出现的地方父类就未必能适应。
里氏替换原则是实现开闭原则的重要方式之一。
在运用里氏替换原则时,尽量把父类设计成抽象类或者接口,让子类继承父类或实现父接口,并实现父类声明的方法。运行时,子类实例替换父类实例。
4.接口隔离原则
-
客户端不应该依赖于它不需要的接口
如果接口隔离原则被破坏,客户端被迫依赖了它不需要的接口,代码就会变得紧密耦合,几乎不可能添加新功能。
这要求我们将接口细化,尽量减少接口中的方法。
总结:要为各个类建立他们需要专门的接口。
5.依赖倒置原则
-
高级模块不应该依赖于低级模块,两者应该依赖于抽象。
-
抽象不应该依赖与细节,细节应该依赖于抽象。
举个例子:
public class Java public void say() System.out.println("我用Java编程"); public class Programmer public void programming(Java java) java.say();
此时,我可以用Java语言编程,但如果我通过学习,掌握了Python,那我该如何扩展类?
显然是很困难的。但是,如果我们遵从依赖倒置原则,将两者依赖于一个抽象,就会大大提高我们代码的扩展性。
public interface Language public void say(); public class Java implements Language @Override public void say() System.out.println("我用Java编程"); public class Python implements Language @Override public void say() System.out.println("我用Python编程"); public class Programmer public void programming(Language language) language.say();
总结:面向接口编程。
6.迪米特法则
-
一个对象应该对其他对象尽可能少的了解,不和陌生人说话。
又称最少知识原则。迪米特原则要求我们在设计系统的时候,要尽量减少两个对象之间的交互,如果两个对象之间不需要彼此之间的通信,那么两个对象就不应该发生任何的直接相互作用。
如果需要调用一个对象的某一个方法,则可以通过第三者转发这个调用。简言之,添加一个第三者,减低现有对象的耦合度。
书籍
《Java设计模式及实践》
以上是关于设计模式学习——六大原则的主要内容,如果未能解决你的问题,请参考以下文章