装饰者模式Decorator
通过组合的方式动态的为对象透明的增加功能,
本质是上功能的动态组合
XE10版本的装饰都有两个抽象类,并有相互继承的管理,实现类与实现的分离
目的是为了动态的增加功能 | 改变对象的外观 | 也可以认为是动态的算法骨架,但也只是模拟而已,两者的设计目的和原本的功能及本质的思想都是不一样的 | |||
组合模式 | 目的是管理组合对象和子对象,为他们提供统一的接口 | ||||
策略模式 | 改变的是对象的内核,可以结合使用 | ||||
模板方法 | 固定的算法骨架 | ||||
责任链模式 chain of responsibility
为了避免发送者与接收者的耦合关系,将信息连成一个链,延着其传递消息,直到被处理
本质是分离职责,动态组合
对象处理相应的请求后即停止
如果执行请求后,继续传递就类似装饰者,但是两都的目的和手段都不同 | |||
组合模式 | 可以结合使用 | ||
装饰者 | 可以互相模仿功能 | ||
策略模式 | 可以在责任链中的某一环使用策略来决定其实现 |
桥接模式
分离抽象与实现
,使其可以独立变化
策略模式 | 分离算法,使其可以相互替换 | |||
状态模式 | 目的是封闭对象对应的行为,并在内部改变对象的行为 | |||
模板方法 | ||||
抽象工厂 | 可以实现桥接中的接口对象 | |||
适配器 | 使不同接口的类可以一起工作 |
访问者模式
作用在对象结构中各元素的操作,它使你可以不改变元素的类的前提下定义作用于这些元素的操作
使用了二次分发
Element.Accpet(Ivisiter)
{
Ivisiter.VisiElement(self);
}
本质是为了预留通路,回调实现
为元素添加新功能 | |||
组合模式 | 通常可以在组合的元素中预留下扩展接口 | ||
装饰者 | 增强对象的原有功能 | ||
解释器 | 抽象语法树由组合模式构成,如果需要为其增加新功能,以实现同一结构对象的不同解释与执行,就可以预留下访问者的接口 |