设计模式 Visitor 模式 VS decorator模式

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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值