一、单一职责原则
定义:一个类只负责一项职责。
问题由来:一个类A负责两个不同的职责,职责A1,职责A2,当职责A1发生改变时候,可能会导致A2功能发生故障。
解决方案:遵循单一职责原则,分别建立两个类A1(职责1),A2(职责2),这样修改职责1的时候就不会影响到职责2了。
遵循单一职责原则的优点:
1.可以降低类的复杂度
2.提高类的可读性,提高系统的可维护性
3.降低变更引起的风险
二、里氏替换原则
定义:只要父类能出现的地方子类就可以出现。
面向对象的语言有三大特点,继承、封装、多态,里氏替换原则就是依赖于继承和多态这两大特性。简单说,就是所有引用基类的地方必须透明的使用其子类对象。
三、依赖倒置原则
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象
问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。
解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。
依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
四、接口隔离原则
定义:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小接口上
问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
五、迪米特法则
定义:一个对象应该对其他对象保持最少的了解。
问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
解决方案:尽量降低类与类之间的耦合。
六、开闭原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
网友评论