http://c.biancheng.net/view/1361.html //设计模式
https://refactoringguru.cn/refactoring/course //图文 设计模式
《Head First Design Patterns》、《大话设计模式》
创建型模式(发现变化,封装变化;对象的实例化)
简单工厂→工厂方法(初定义单一产品的抽象工厂)、抽象工厂(构成系列产品实例化,直接实例化指定工厂)
单例 构造方法私有化,提供实例化的静态方法 (懒汉模式,懒加载,线程不安全,需要Syncronize、volatile 关键字 ,恶汉模式,static直接实例化对象,instance方法直接返回该对象 )
原型模式 (实现cloneable 重写hashcode equals方法,深拷贝 相关命令、备忘录)
建造者模式 (多数的特色建造者,唯一指定的指挥使/存在多种实例化方案,指挥建造者生产,由建造者返回最终对象)
结构型模式(多组合,少继承)
适配器 代码后的不同接口适配 适配器实现客户端调用接口,然后转接新接口的调用。
桥接 代码前的设计 抽象为 遥控-设配 遥控器包含任一设备(可以多种设备组合,一键操作-配合抽象工厂、生成器),进行设备的接口调用。
代理模式 初定义服务接口,代理类、原始类实现服务接口,代理类组合原始接口,由原对象构造生成具体代理,并在相同接口功能前后添加功能 代理可自行管理服务对象的生命周期,装饰需要客户端控制
装饰模式 人穿衣 打印的装饰 初定义接口(_decorator), 定义简单数据读写器,定义抽象基础装饰类(构造方法入参为可装饰对象)返回对象奕为装饰者,具体装饰类,添加职能 DataSourceDecorator encoded = new CompressionDecorator(new EncryptionDecorator(new FileDataSource("out/OutputDemo.txt"))); 和责任链结构类似,递归组合,不同:责任链可以随时停止传递请求,装饰遵循原有接口扩展无法中断。和组合结构图类似,递归组合。装饰和组合可以从原型模式获益。
外观模式 三层架构 隐藏子系统创建对象,抽象工厂可代替,外观和中介者职责类似,不同:外观为所有对象定义接口,不提供新功能,子系统中对象可相互交流;中介系统中组件沟通行为中心化,各组件值认识中介。 外观和代理都有一个复杂实例,外观提供新接口,代理与服务对象遵循一个接口。
享元模式 大量生产部分相同特征的对象,抽取重复特征为单独的享元对象(享元工厂池/map来管理),树→树种 用于组合树实现叶节点;
组合 树形结构 根,节点,叶 初定义接口(_component),抽象类(根), 节点继承根类存在(组合)多叶,或节点 叶继承根类为边界实现。 操作树→绽放树(用生成器构建复杂组合数;用迭代器遍历执行所有节点→叶;用访问者操作组合树;用享元实现叶节点)
行为型模式(面向接口编程)
模板方法 合同生成抽象基类(_temp)(抽象方法:获取合同模板-项目中获取,服务器地址获取、获取合同数据-接口入参,数据库获取,第三方api获取 ;公共方法:基础数据生成,模板数据填充,记录文件表,配置式签章、签名) 模板方法基于继承抽象基类,扩展中子类改变不同算法(静态);策略基于组合算法 允许运行时切换行为
策略模式 所有算法抽象策略类(_strategy) 上下文(context)配置策略
状态模式 所有可能状态新建一个类(__state) 原始对象(document)组合状态类,委托状态类执行工作 可视为策略的扩展,不同:状态将部分工作委托给状态类,状态类相互之间有联系,允许自行改变不同场景下的状态;策略的不同算法相互独立
责任链 初定义抽象基础类(_ware),上链方法由上一职责对象作为参数。 Middleware middleware = new ThrottingMiddleware(2);middleware.linkWith(new UserExsitsMiddleware(server)).linkWith(new RoleCheckMiddleware());结合组合模式使用,责任链管理者可用命令模式。
命令模式 初定义命令基础类(command) ,命令类认识(组合)接收者对象 +备忘录实现“撤销”+原型保存历史记录 , 和策略相似,不同:命令将任一操作转为命令对象,操作参数作为成员变量;策略将某个执行过程不同方式抽象为算法。
中介者 初定义中介者(_mediator),介绍所有组件认识(组合)具体中介 所有组件链接到中介者时即与观察者不同,所有组件皆为发布者,相互沟通时为分布式观察者
观察者 发送者会遍历订阅列表并调用每个订阅者对象的通知方法
责任链、命令、中介、观察者处理发送者和接收者之间的不同连接方式:
责任链 动态请求一连串的潜在接收者,直到一个接收者处理请求;
命令 发送者创建命令,命令直接执行接收者;
中介 发送者告知中介,中介告知接收者;
观察者动态地选择订阅请求或取消接收请求。
迭代器模式 初定义迭代器接口(_interator),hasNext getNext reset ; 初定义集合类接口(_collection)生成迭代器 +备忘录获取当前迭代器状态,和回滚;+访问者遍历复杂数据结构,对其中元素进行操作
备忘录 发起者 管理者(command)拥有(组合)备忘录(memento) +命令实现“撤销”;+迭代器获取当前迭代器状态; 原型可作为备忘录得简化版
访问者 访问者重载所有元素的访问方法, 确定的、有限的元素认识(组合)访问者,不同具体访问者(算法)和元素(对象)解耦 命令模式的加强,可对组合树进行操作,+迭代器遍历复杂数据结构。
解释器模式