为什么要遵循七大原则
提高代码复用((相同功能的代码,不用多次编写)
提高代码可读性(规范编码习惯,便于其他程序员的的阅读理解)
提高代码可扩展性(可以很方便的的添加新的功能)
提高代码可靠性(新增功能后,不影响原有的功能)
使程序呈现 高内聚(一个功能模块内部结构紧凑), 低耦合 (不同功能模块之间的依赖性低)的特性
设计模式就是为了解决上述问题,所出现的方法学
开闭原则
- 对扩展开放,对修改关闭
- 当软件需要变化时,尽量通过扩展软件实体方式实现变化,而不是通过修改已有的代码来实现变化
里氏替换原则
- 所有引用父类的地方必须能透明的使用其子类对象
- 在使用继承时,尽量不要重写父类的方法
- 里氏替换原则告诉我们,继承实际上让两个类耦合性增加了,通常解决办法:去掉原有的继承关系,让原来的父类和子类去继承一个更通俗的基类,采用依赖、聚合、组合的关系代替
依赖倒转原则
- 高层模块不应该依赖低层模块,二者都应该依赖其抽象( 变量的声明类型尽量使抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化 );
- 抽象不应该依赖细节,细节应该依赖抽象;
- 依赖倒转的中心思想是面向接口编程;
- 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中, 抽象指的是接口或抽象类,细节就是具体的实现类;
- 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
单一职责原则
- 降低类的复杂度,一个类只负责一项职责;
- 提高类的可读性,可维护性;
- 降低变更引起的风险;
- 通常情况下,应当遵守单一职责原则, 只有逻辑足够简单,才可以在方法级违反单一职责原则。
接口隔离原则
类A通过接口 Interface1、2 依赖类B,类C通过接口 Interface1、3 依赖类D,如果接口 Interface 对于 类A 和 类C 来说不是最小接口,那么 类B 和 类D 必须去实现他们不需要的方法。
将接口 Interface 拆分为独立的几个接口,类A 和 类C 分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
接口 Interface 中出现的方法,根据实际情祝拆分为三个接口。
迪米特原则(最少知道原则)
- 一个对象应对其他对象保持最少的了解(一个类对自己依赖的其他类知道的越少越好)
- 核心是降低类之间的耦合(类与类关系越密切。耦合度越大)
-一个类的逻辑尽量封装在类的内部,除了对外提供能public方法,不对外泄露任何信息
合成复用原则
- 尽量使用合成/聚合的方式,而不是使用继承
总结
- 找出应用中需要变化之处,把它们独立出来,不要和不需要变化的代码混在一起。
- 针对接口编程,而不是针对实现编程。
- 为了交互对象之间的松耦合设计而努力。