目录
开篇
开闭原则
一个软件实体(类,模块,函数)应该是对扩展开放,对修改关闭。强调用抽象构建框架,用实现扩展细节,可以提高软件系统的稳定性和可复用性(抽象的好处)。开闭原则的核心思想就是面向抽象编程。
依赖倒置原则
设计代码结构的时候,高层模块不应该依赖底层模块,二者都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。依赖倒置的核心思想是高低层之间通过抽象依赖,细节依赖抽象。
可以减少类与类之间的耦合,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改代码所带来的风险。
demo:
tom学习课程, tom作为高层模块,依赖课程模块,tom不能直接依赖学习java和学习mysql,这违背了依赖倒置原则,所以tom应该依赖课程的抽象;
低层课程是抽象,包含的具体课程java,mysql等是细节,细节依赖抽象才符合依赖倒置原则。
单一职责原则
将每个职责都用一个类来实现进行解耦,这样后期需求变更后维护互不受影响。核心思想就是根据功能拆成多个类或者拆分成多个方法,面向对象。
接口隔离原则
客户端不应该依赖其不需要的接口,提供专用的接口,而不使用单一的总接口。设计接口时应该注意以下几点:
- 一个类对另一个类的依赖应该建立在最小接口上;
- 建立单一接口,不要建立臃肿庞大的接口;
- 尽量新华接口,接口中的方法越少越好;
接口隔离原则的优点:符合高内聚,低耦合的特点,可以使类具有很好的可读性,可扩展性和可维护性。
缺点是需要我们花时间去考虑业务模型,包括对以后可能发生变更的地方做一些判断,需要我们对抽象、对业务模型的理解足够理解。
迪米特原则(最少知道原则)
只和朋友交流,不和陌生人说话。尽量降低类与类之间的耦合度。
朋友: 成员变量,方法出入参中的类;方法体内的类不属于朋友(方法内new出来的对象)。
demo:
MVC的controller不能直接访问陌生人DAO,而要通过朋友service访问。
里氏替换原则
子类对象可以扩展父类的功能,但是不能改变父类的原有功能。所有使用父类的地方必须可以完全用其子类替换,且不影响原有功能。只存在于父子类之间。
优点:符合开闭原则, 可以约束继承泛滥;代码变更时能降低需求变更带来的风险,提高代码兼容性、可维护性扩展性和健壮性。
合成复用原则
尽量使用对象的组合/聚合而不是继承来达到软件复用的目的。
优点:可以使系统更灵活,降低类耦合度