装饰者
不改变原始类和不使用继承的情况下 , 通过组合的方式动态扩展原始类的功能
动态扩展类的功能
适配器
不改变原始类的情况下 , 通过组合的方式使其适配新的接口
复用现有类 , 但与期望接口不适配
桥接
当类存在多个独立变化的维度时 , 通过组合的方式使得其可以独立进行扩展
存在多个维度的继承体系时
门面
为子系统中一组接口定义一个更高层的接口 , 使得子系统更加容易使用
解决接口复用性(细粒度)与接口易用性(粗粒度)的矛盾
组合
将对象组合成树形结构以表示部分-整体的层次结构 , 统一单个对和组合对象的处理逻辑
满足部分与整体这种树形结构
享元
运用共享技术有效地支持大量细粒度的对象
当系统存在大量的对象 , 这些对象的很多字段取值范围固定
行为型
观察者
多个观察者监听同一主题对象 , 当主题对象状态发生变化时通知所有观察者 , 使它们能够自动更新自己
解耦事件创建者与接收者
模板
定义一个操作中算法的骨架 , 将某些步骤实现延迟到子类中
解决复用与扩展问题
策略
定义一组算法类 , 将每个算法分别封装起来 , 使得它们可以互相替换
消除各种if-else分支判断 解耦策略的定义、创建、使用
状态
允许一个对象在其内部状态改变的时候改变其行为
分离对象的状态与行为
职责链
将一组对象连成一条链 , 请求沿着该链传递 , 直到某个对象能够处理它为止
解耦请求的发送者与接收者
迭代器
提供一种方法顺序访问一个集合对象的各个元素 , 但不暴露该对象的内部表示
解耦集合对象的内部表示与遍历访问
访问者
封装一些作用于某种数据结构中各元素的操作 , 在不改变数据结构的前提下 , 定义作用于这些元素的新操作 。
分离对象的数据结构与行为
备忘录
在不违背封装原则的前提下 , 捕获一个对象的内部状态 , 并在该对象之外保存这个状态 , 以便之后恢复对象为先前的状态
用于对象的备份与恢复
命令
将不同的请求封装成对应的命令对象 , 对命令的执行进行控制且对使用方透明
用于控制命令的执行 , 比如异步、延迟、排队、撤销、存储与撤销
解释器
【为什么要重构?如何重构?这个宝典请一定收藏!】为某个语言定义它的语法表示 , 并定义一个解释器来处理这个语法
用于编译器、规则引擎、正则表达式等特定场景
中介
定义一个单独的中介对象 , 来封装一组对象之间的交互 , 避免对象之间的直接交互
使各个对象不需要显式地相互引用 , 从而使其耦合松散
代码分层
image.png
模块结构说明
代码开发要遵守各层的规范 , 并注意层级之间的依赖关系 。
命名规范
一个好的命名应该要满足以下两个约束:
如果你觉得一个类或方法难以命名的时候 , 可能是其承载的功能太多了 , 需要进一步拆分 。
约定俗称的惯例场景强约束示例
项目名
全部小写 , 多个单词用中划线分隔‘-’
-cloud
包名
全部小写
com..
- 常见代码重构技巧
- 解密:为什么唐玄宗选择将诗人李白赐金放还?
- 高欢为什么不如宇文泰:输在高欢的儿子不争气
- 雍正皇帝为什么要逼*自己的生母罪有应得
- 为什么说猛将岳云不敢用西瓜大小的锤子?
- 世界上最凶猛的十大恶犬,遇见要躲! 世界上十大禁犬
- 新“恐怖童谣”小白船:明明是小孩子唱的歌,为什么可怕? 中国十大恐怖歌曲播放
- 全球刹车片10大品牌排行榜,要换刹车片照着买就行! 世界刹车片十大品牌
- 刺猬冬眠需要准备什么,刺猬会冬眠吗
- 揭秘为什么秦始皇和汉武帝都不喜欢商人