设计模式学习笔记(一)设计模式六大原则
什么是设计模式?
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码的可靠性。平常主要有这样的三大类型:
那么这些设计模式具体会遵循哪些原则呢?
设计模式遵循的原则
1. 单一职责(Simple responsibility principle, SRP)
又叫做单一功能原则,每个类只负责一项职责。是面向对象五个基本原则之一。
-
原则定义:一个类只有一个发生变化的原因,否则该类应该被拆分。
- 实现:通过控制类的粒度大小,将对象解耦、提高其内聚性(类、方法、接口)
-
模拟场景:将 if-else 的用户(访客用户、普通用户和VIP 用户)分类进行编写职责代码(模板模式)
2. 开闭原则(Open Closed Principle,OCP)
规定“软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修订是封闭的”
- 原则定义:扩展开发、修改封闭
- 实现:通过接口或者抽象类为软件定义一个相对稳定的抽象层,将具体的变化封装在具体的实现类中
- 模拟场景:长方形-三角形-圆形的面积(扩展继承)
3. 里氏替换原则(Liskov Substitution Principle, LSP)
子类可以扩展父类的功能,但不能改变父类原有的功能,和Java 中的继承类似。
- 原则定义:兼容性、维护性和扩展性
- 实现:子类继承父类时,可以扩展新的方法,但是因避免重写父类的方法
- 模拟场景:银行卡(信用卡、储蓄卡、地铁卡和饭卡)
4. 迪米特法则(Principle of Least Knowledge, PLK)
也叫做最小知识原则,意义在于降低类之间的耦合。由于每个对象尽量减少对其他对象的了解,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系
- 原则定义:最少知道、减少依赖
- 模拟场景:学生成绩和对应排名
5. 依赖倒转原则(Dependence Inversion Principle, DIP)
是实现开闭原则的重要途径,在软件设计中,具体的实现变化很多,但是抽象层相对比较稳定,因此以抽象为基础搭建起来的架构要比具体实现的要稳定的多。因此程序要依赖于抽象接口,尽量避免依赖于具体实现。
- 原则定义:多依赖于抽象,避免依赖于实现
- 实现方法:
- 每个类尽量提供接口或者抽象类
- 任何类都不应该从具体类派生
- 使用继承时尽量遵循里氏替换原则
- 实现方法:
- 模拟实现:爬取不同网页(新闻、官网、视频)使用模板模式抽象同一爬取流程,根据不同网页具体实现
6. 接口隔离原则(Interface Segregation Principle, ISP)
要求程序员尽量将臃肿庞大的接口拆分成更小和更具体的接口。
- 原则定义:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用
- 实现方法:
- 接口尽量小,但要有限度。保证单一职责原则
- 为依赖接口的类定制服务。只提供调用者需要而方法,屏蔽不需要的方法
- 实现方法:
- 模拟场景:一个OA系统,外部只负责提交和撤回工作流,内部负责审核和驳回工作流