1. 计算机相关专业的同学们应该都有过设计模式这门课,但是过去几年了,因为工作需要,所以最近在重新复习。以下是根据尚硅谷来的韩顺平图解java设计模式来总结的。个人觉得这个韩老师讲得非常透彻,以此做出总结和大家分享一下。
2. 七大设计原则:单一职责原则、接口隔离原则、依赖倒转倒置原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则。
3. 单一职责原则(表示一个模块的组成元素之间的功能相关性)
1) SRP 是一个简单又直观的原则,但是在实际编码的过程中很难将它恰当地运用,需要结合实际情况进行运用。
2) 降低类的复杂度,一个类只负责一项职责。
3) 提高了代码的可读性,提高系统的可维护性。
4) 通常情况下,我们应当遵守单一职责原则 ,只有逻辑足够简单,才可以在代码级违反单一职责原则。只有类中方法数量足够少,可以在方法级别保持单一职责原则。
4. 接口隔离原则(一个类对另一个类的依赖应该建立在最小的接口上)
1) ISP的思想在于建立单一接口,尽可能地去细化接口,接口中的方法尽可能少。
2) 客户端不应该依赖它不需要的接口。
如图:将接口Interface1 拆分为独立的几个接口,类 A 和类 C 分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
5. 依赖倒转倒置原则(使用接口或抽象类制定好规范,把展现细节的任务交给他们的实现类去完成)
1) DIP,低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好。
2) 变量的声明类型尽量是抽象类或接口 , 这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化。
6. 里氏替换原则(重点在不影响原功能,而不是不覆盖原方法)
1) LSP,子类可以扩展父类的功能,但不能改变父类原有的功能。
2) 通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖,聚合,组合等关系代替。
7. 开闭原则(用抽象构建框架,用实现扩展细节)
1) OCP 可以具有良好的可扩展性,可维护性。
2) 尽可能地不要修改已经写好的代码,而是去扩展它。
8. 迪米特法则(尽量的将逻辑封装在类的内部)
1) LOD降低类之间的耦合。
2) 只要求降低对象间耦合关系,并不是要求完全没有依赖关系。
9. 合成复用原则(尽量使用合成聚合的方式,而不是使用继承)
1) 如果直接继承基类,会破坏封装,因为继承将基类的实现细节暴露给子类;如果基类的实现发生了改变,则子类的实现也不得不改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性。
2) CRP在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分; 新的对象通过向这些对象的委派达到复用已有功能的目的。
附:
1. 尚硅谷图解Java设计模式资料下载。
2. 如果需要看demo,可以参考:设计模式之七大基本原则。