- 开闭原则
—软件实体应当对扩展开放,对修改关闭。
引申1:当子类的方法重载父类的方法时,方法的前置条件(即方法的输入参数)要比父类的方法更宽松
引申2:当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的的输出/返回值)要比父类的方法更严格或相等
—继承时应该只新增不重写
- 里氏替换原则
----继承必须确保超类所拥有的性质在子类中仍然成立。
阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。
举例就是:“几维鸟/企鹅不是鸟”,企鹅/新西兰的几维鸟由于翅膀退化无法飞行,所以几维鸟不应该继承bird类,而应该继承自animal类。
- 依赖倒置原则
—依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。
依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
其核心思想是:要面向接口编程,不要面向实现编程。
依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性。
举例就是:service/serviceImpl
—先写抽象类/接口,再继承/实现抽象类/接口
- 单一职责原则
—又称单一功能原则,这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。
单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。
举例就是:学生工作指导分为学业上(导师)的和生活上的(辅导员)
—拆分类
- 接口隔离原则
—客户端不应该被迫依赖于它不使用的方法。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上。
以上两个定义的含义是:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
举例就是:定义三个接口,一个输入接口,一个输出接口,一个计算接口,然后让类去实现这三个接口。
—拆分接口
- 迪米特法则
又叫作最少知识原则—只与你的直接朋友交谈,不跟“陌生人”说话。
其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
举例就是:明星与粉丝通过经纪人见面,明星与媒体通过经纪人洽谈业务。
—运用中介类
- 合成复用原则
又叫组合/聚合复用原则—它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
合成复用原则是通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。
合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。