1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
| mindmap root((设计模式 Design Patterns)) 设计目标 提高可维护性 提高可复用性 提高可扩展性 降低耦合 提升沟通效率
设计原则 SOLID SRP["单一职责原则 SRP 一个类只做一类事"] OCP["开闭原则 OCP 对扩展开放 对修改关闭"] LSP["里氏替换原则 LSP 子类可替换父类"] ISP["接口隔离原则 ISP 接口要小而专"] DIP["依赖倒置原则 DIP 面向抽象编程"] 其他原则 CARP["合成复用原则 多用组合 少用继承"] LoD["迪米特法则 只和直接朋友通信"]
分类 创建型模式 核心["关注对象怎么创建"] 简单工厂 工厂方法 抽象工厂 单例 建造者 原型 结构型模式 核心["关注类和对象如何组合"] 适配器 代理 装饰器 外观 桥接 组合 享元 行为型模式 核心["关注对象如何协作和分配职责"] 观察者 责任链 策略 状态 模板方法 命令 迭代器 中介者 备忘录 访问者 解释器
创建型高频 工厂模式家族 简单工厂 优点["创建逻辑集中"] 缺点["新增产品要改工厂 违反开闭原则"] 工厂方法 优点["扩展新产品更方便 符合开闭原则"] 缺点["类数量增加"] 抽象工厂 核心["创建一整套产品族"] 优点["同一风格产品统一切换"] 缺点["新增产品等级结构困难"] 单例模式 核心["一个类只有一个实例"] 写法 饿汉式 懒汉式 同步方法懒汉式 DCL["双重检查锁 DCL"] 静态内部类["推荐"] 枚举单例["推荐"] 关注点 线程安全 懒加载 防反射破坏 防反序列化破坏
结构型高频 适配器模式 核心["接口不兼容时做转换"] 角色 Target["目标接口"] Adaptee["被适配者"] Adapter["适配器"] 实现 类适配器["继承实现"] 对象适配器["组合实现 更推荐"] 代理模式 核心["控制对目标对象的访问"] 作用 权限控制 日志 事务 延迟加载 远程调用 Java实现 静态代理 JDK动态代理 CGLIB代理 装饰器模式 核心["不改原类前提下动态增强功能"] 对比代理 装饰器更强调功能增强 代理更强调控制访问
行为型高频 观察者模式 核心["一对多通知机制"] 适用 事件发布订阅 消息通知 状态变化广播 责任链模式 核心["多个处理器串成链逐个处理"] 适用 过滤器链 拦截器链 审批流 策略模式 核心["封装可替换算法"] 优点 消除大量 if else 算法可自由切换 符合开闭原则 适用 支付方式 促销计算 负载均衡 状态模式 核心["状态不同 行为不同"] 适用 订单状态流转 工作流状态机 对比策略 策略["重点在算法替换"] 状态["重点在状态驱动行为变化"]
面试回答主线 第一步["先说属于哪一类模式"] 第二步["再说解决什么问题"] 第三步["讲核心角色和结构"] 第四步["补优缺点"] 第五步["结合框架或项目举例"]
框架里的影子 Spring 工厂["BeanFactory"] 代理["AOP 事务"] 观察者["事件机制"] JDK 单例["Runtime"] 工厂["Calendar getInstance"] 迭代器["Iterator"] Netty 责任链["Pipeline"] Dubbo 代理 装饰器 策略 责任链
|