设计模式 Visitor 模式 VS decorator模式
2013-06-12 14:19
267 查看
Visitor模式和Decorator模式提供了无需更改现有类层次结构的情况下向其中增加新方法。
Visitor模式应用场景:如果一个应用程序存在有需要以多种不同方式进行解释的数据结构,就可以使用Visitor模式。
示例:
解决问题: 在Modern接口中增加ConfigureForUnix方法,ConfigureForWin方法或者其他平台的方法。
Visitor 模式如同一个矩阵,图1例子中,矩阵的一条轴是不同类型的调制解调器,另一条轴是不同类型的操作系统。该矩阵的每一个单元都被一项功能填充,该功能描绘了如何把特定的调制解调器初始化为可以在特定操作系统中使用。
图1 Visitor 模式
Acyclic Visitor 模式如同一个稀疏的矩阵,访问者不需要针对每一个被访问的派生类都实现visit函数。例如,如果Erniet调制解调器不可以配置在UNIX中,那么UnixModernConfigurator都不会实现ErnieVisitor接口。
图2
Decorator模式:
图3 Decorator 模式
例子:
1)android 中的Decorator模式:
从图中可以看出,Activity继承了ContextWrapper类,而在ContextWrapper类中,实现了startService函数。在ContextWrapper类中,有一个成员变量mBase,它是一个ContextImpl实例,而ContextImpl类和ContextWrapper类一样继承于Context类,ContextWrapper类的startService函数最终过调用ContextImpl类的startService函数来实现。这种类设计方法在设计模式里面,就称之为装饰模式(Decorator),或者包装模式(Wrapper)。
Visitor模式应用场景:如果一个应用程序存在有需要以多种不同方式进行解释的数据结构,就可以使用Visitor模式。
示例:
解决问题: 在Modern接口中增加ConfigureForUnix方法,ConfigureForWin方法或者其他平台的方法。
Visitor 模式如同一个矩阵,图1例子中,矩阵的一条轴是不同类型的调制解调器,另一条轴是不同类型的操作系统。该矩阵的每一个单元都被一项功能填充,该功能描绘了如何把特定的调制解调器初始化为可以在特定操作系统中使用。
图1 Visitor 模式
Acyclic Visitor 模式如同一个稀疏的矩阵,访问者不需要针对每一个被访问的派生类都实现visit函数。例如,如果Erniet调制解调器不可以配置在UNIX中,那么UnixModernConfigurator都不会实现ErnieVisitor接口。
图2
Decorator模式:
图3 Decorator 模式
例子:
1)android 中的Decorator模式:
从图中可以看出,Activity继承了ContextWrapper类,而在ContextWrapper类中,实现了startService函数。在ContextWrapper类中,有一个成员变量mBase,它是一个ContextImpl实例,而ContextImpl类和ContextWrapper类一样继承于Context类,ContextWrapper类的startService函数最终过调用ContextImpl类的startService函数来实现。这种类设计方法在设计模式里面,就称之为装饰模式(Decorator),或者包装模式(Wrapper)。
相关文章推荐
- 设计模式袖珍版--联系转载之 Visitor
- C++设计模式之十九--Visitor访问者模式
- 学习php设计模式 php实现访问者模式(Visitor)
- 设计模式之访问者(visitor)模式
- 设计模式入门之訪问者模式Visitor
- 设计模式 - Visitor 模式(访问者模式)
- 设计模式——访问者模式(Visitor)
- 研磨设计模式 之 访问者模式(Visitor)3——跟着cc学设计系列
- 设计模式读书笔记:Visitor(访问者)
- [导入]C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.zip(10.41 MB)
- 设计模式(23)-行为型模式-VISITOR模式
- 《模式——工程化实现及扩展》(设计模式C# 版)《访问者模式 Visitor》——“自我检验"参考答案
- 设计模式之Visitor
- visitor-acceptor访问者设计模式笔记
- Java设计模式十三:访问者模式(Visitor)
- 笔记:Gof设计模式--Visitor
- Java设计模式-访问者模式(Visitor)
- 设计模式学习19 Visitor
- 设计模式之访问者模式(Visitor)摘录
- 常见设计模式的解析和实现(C++)之二十-Visitor模式