SOLID设计原则:
S — 单一原则:一个类只负责一个功能
O — 开闭原则:一个类对扩展开放,对修改封闭
L — 里氏替换原则:所有使用父类对象的地方都能使用子类的对象来替换。简单的理解就是"子类可以扩展父类的功能,但是不能改变父类原有的功能"
继承作为面向对象的三大特性之一,给程序设计带来方便的同时也存在着弊端。比如使用继承会给程序带来侵入,程序的可移植性降低,增加了对象之间的耦合。如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能会产生故障。
I — 接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。应该为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有的类去依赖。
采用接口隔离原则要注意一下几个方面:
1、接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
2、为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
3、提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
D — 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
依赖倒置原则的核心是面向接口编程
迪米特法则:也叫最少知道原则,指的是一个对象应该对其他对象保持最少的了解。
迪米特法则的初衷是降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系。但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个“中介”来发生联系,例如本例中,总公司就是通过分公司这个“中介”来与分公司的员工发生联系的。过分的使用迪米特原则,会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。
组合/聚合复用原则:尽量使用对象组合,而不是继承来达到复用的目的
使用继承会破坏系统的封装性,因为继承会将基类的实现暴露给子类。
网友评论