前言
设计模式核心思想
- 高内聚, 低耦合
- 可扩展性: 方便迭代新功能;
- 可靠性: 迭代功能后不会影响已有功能;
- 可读性: 编程规范, 方便同事阅读理解;
- 代码重用性: 不编写相同代码;
- 设计模式遵循的七大原则
- 单一职责
- 思想: 执行者只做一件事;
- 案例: Dao层里的一个订单mapper只做订单表的相关的事, 但这个mapper里同时又操作了用户表就违背了单一 职责的思想;
- 违背 遵循
- 接口隔离
- 思想: 按方法用途将单个接口拆分成多个接口, 使类实现接口只实现, 类想用到的方法;
- 违背 遵循
- 依赖倒转(面向接口编程)
- 思想: 调用方由调用提供者的底层类, 转换成调用提供者的顶层接口/抽象类, 提供者传递实现类/子类到接口/抽象类, 实现多态动态加载;
- 案例: 方法中之前调用的是实现类, 用依赖倒转后将调用实现类改为调用接口;
- 违背 遵循
- 里氏替换
- 思想: 子类不要重写父类方法, 子类和父类继承基类实现逻辑解耦;
- 案例: eat()只有父类有, 但开发中子类不小心写了一个与父类相同名字的eat()(无意识重写方法), 在用子类对象调用父类的eat()时, 调用的却是子类重写后的方法;
- 违背 遵循
- 迪米特法则
- 思想: 最少知道法则, 调用方无需知道被调用对象的具体实现细节,被调用的对象对外只提供访问功能的方法;
- 拓展
- 直接朋友: 本类的参数, 方法返回值, 成员变量;
- 其他朋友: 出现在本类的局部方法中与本类不相关的局部变量;
- 违背 遵循
- 开闭原则(OCP原则)
- 思想: 提供方修改代码后不应该改动调用方的代码;
- 违背 遵循
- 合成复用
- 思想: 要想使用其他类的方法, 要用组合/聚合的方式, 而不是用继承的方式实现;
- 组合: 外部类对象随本类的实例而实例, 外部类对象以成员属性的方式存在(和本类同生死);
- 聚合: 外部类对象通过赋值的方式在本类中进行实例(外部对象聚集合并到本类);
- 依赖: 本类使用到外部类就表示本类依赖调用了外部类;
- 说明
UML类图
- 画类图
- 描述一个类
- 线性说明
- 练习
学习期间使用到的工具
- XMind 思维导图(笔记)
- Snipaste 截图
- 在线UML类图
- GitHub: https://github.com/HackDream2018/netty_lecture.git 案例包: test.designpattern
设计模式有3类
- 创建型
- 结构型
- 行为型