Please enable JavaScript.
Coggle requires JavaScript to display documents.
设计模式 (Adapter (类适配器 (继承类,实现目标接口), 对象适配器 (定义类变量,实现目标接口), 使用不同接口的类所提供的服务为客户端…
设计模式
Adapter
类适配器
继承类,实现目标接口
对象适配器
定义类变量,实现目标接口
使用不同接口的类所提供的服务为客户端提供所期望的接口
例子:各国插座适配
Observer
在多个对象之间定义一个对象的依赖关系,当一个对象的状态发生改变时,会通知依赖于它的对象,并根据状态做出相应的反应
实现方法
发布-订阅
事件驱动
例子:库存/降价
Proxy
通过一个代理或占位符来控制对象的访问
实现方法
静态代理
动态代理
例子:Spring AOP
Abstract Factory
允许创建一族相关或相互依赖的对象
例子:Spring框架,包含多个工厂
Bridge
将抽象与抽象方法的实现相互分离来实现解耦,使得二者可以相互独立变化
例子:数据库驱动
Builder
将类的构建逻辑转移到类的实例外部
例子:HttpClient的PostEntity的构造
Facade
为子系统的一组接口提供统一的高层接口
例子:获取数据内容(从两个系统中,合并结果返回)
Factory Method
定义一个用于创建对象的接口,并控制返回哪个类的实例
例子:Spring的@ Inject/@ Autoware
Composite
将组合对象成树结构以表示部分整体的层次结构。使用户对但对象和组合对象的使用具有一致性。
例子:公司组织结构(基础信息+子部门)
Singleton
确保一个类有且仅有一个实例并为它提供一个全局访问点
实现方法
枷锁
静态类
Null判断
枚举
Mediator
定义一个对象,封装一组对象的交互,从而降低对象间的耦合度,避免对象间的显示引用,并且可以独立地改变对象的行为
例子:聊天室房间/飞机控制塔
Prototype
通过复制一个现有的对象来生成新对象,而不是通过实例化方法
例子:Spring的@ Scope("prototype")
Flyweight
通过共享来有效地支持大量细粒度的对象
例子:数据库连接池/线程池
Mememto
为对象的状态提供存储和恢复功能
例子:游戏进度存储
Template Method
在一个方法里实现一个算法,并推迟定义算法中的某些步骤,从而让其他类重新定义他们
例子:页面的模板
Chain Of Responsibility
通过给多个对象处理请求的机会,以解除请求的发送者与接受者之间的耦合
例子:Filter
State
将表示对象状态的逻辑分散到代表状态的不同类中
例子:背景色明暗自动调节
Command
将请求封装在对象内部
例子:数据库事务
Interpreter
根据实先定义好的一系列组合规则,组合可执行对象
例子:SQL语句/正则表达式
Strategy
将可以互换的方法封装在各自独立的类中,并让每个方法都实现一个公共的操作
例子:Java Lambda的Comparator比较器
Visitor
在不改变类层次结构的前提下,对该层次结构进行扩展
例子:根据访问者返回不同级别的烧录日志
Iterator
为顺序访问集合元素提供一种方式
例子:List的遍历
Decorator
向一个现有的对象添加新的功能,同时又不改变其结构
例子:日志输出增加额外的信息或转换格式/流和输出器