4.5 《硬啃设计模式》 第22章 增加新方法的烦恼 - 访问者模式(Visitor Pattern)
2013-11-14 12:31
211 查看
有这么一个类,我们有可能需要增加n多的方法,但我们又不太想直接修改该类,你有什么好办法呢?
这个类是原来老系统的,我们想扩展它的功能,但又不太希望改变它的“接口”,或者说尽量少改变它的“接口”。
你看有什么办法,能在外面增加这个类的功能?
这样的要求也太强人所难了吧?不能动它,又要增加方法?
完全不改原来的类是不可能增加新方法的,我们要想办法开一个“小口”,通过这个“小口”来实现灵活增加它的功能。
访问者模式就是通过这个“小口”来访问原类,从而增强原类的功能。
应用了访问者模式的类图如下:
说明:
1.SomeClass的Accept()方法就是这个小口,Accept()方法只有一句代码,就是:visitor.NewMethod(this),这是访问者模式的精妙之处。
2.SomeClass的新功能通过实现IVisitor接口的类来实现。
2.如果要调用SomeClass的新功能,只需要调用它的Accept()方法并传入实现了新功能的Visitor便可。
现在麻烦来了,要增加方法的类不止一个,而是很多个!咋办?
你可能会想,那还不容易,针对每一个类,用前面说的方法就OK了!不过这样就有很多Visitor了,有没有更好的办法?
我们看看访问者模式的完整类图:
说明:
1.要对多少个类增加新方法,接口IVisitor就需要定义多少个方法,IVisitor是和原来的类绑死的。
2.如果老是有新类加入到原来的类中,不适用访问者模式。
3.需要不改变原来类结构而增加新功能时,可考虑访问者模式。
访问者模式的一些用途:
1.对老系统的改造:对象的结构很少改变,但需要在此结构上增加新的操作。
2.需要对集合、树等对象结构进行遍历,实现某些新操作,希望能随时修改或增加这些操作。
例1:将所有的product价钱提高10%.
例2:对某文件夹下面的所以文件夹和文件的名称进行中文检测。
例3:对表达式树进行语法检测。
请看下一文…… 作者:张传波创新工场创业课堂(敏捷课程)讲师软件研发管理资深顾问CMMI首席专家《火球——UML大战需求分析》作者www.umlonline.org创办人
这个类是原来老系统的,我们想扩展它的功能,但又不太希望改变它的“接口”,或者说尽量少改变它的“接口”。
你看有什么办法,能在外面增加这个类的功能?
这样的要求也太强人所难了吧?不能动它,又要增加方法?
完全不改原来的类是不可能增加新方法的,我们要想办法开一个“小口”,通过这个“小口”来实现灵活增加它的功能。
访问者模式就是通过这个“小口”来访问原类,从而增强原类的功能。
应用了访问者模式的类图如下:
说明:
1.SomeClass的Accept()方法就是这个小口,Accept()方法只有一句代码,就是:visitor.NewMethod(this),这是访问者模式的精妙之处。
2.SomeClass的新功能通过实现IVisitor接口的类来实现。
2.如果要调用SomeClass的新功能,只需要调用它的Accept()方法并传入实现了新功能的Visitor便可。
现在麻烦来了,要增加方法的类不止一个,而是很多个!咋办?
你可能会想,那还不容易,针对每一个类,用前面说的方法就OK了!不过这样就有很多Visitor了,有没有更好的办法?
我们看看访问者模式的完整类图:
说明:
1.要对多少个类增加新方法,接口IVisitor就需要定义多少个方法,IVisitor是和原来的类绑死的。
2.如果老是有新类加入到原来的类中,不适用访问者模式。
3.需要不改变原来类结构而增加新功能时,可考虑访问者模式。
访问者模式的一些用途:
1.对老系统的改造:对象的结构很少改变,但需要在此结构上增加新的操作。
2.需要对集合、树等对象结构进行遍历,实现某些新操作,希望能随时修改或增加这些操作。
例1:将所有的product价钱提高10%.
例2:对某文件夹下面的所以文件夹和文件的名称进行中文检测。
例3:对表达式树进行语法检测。
请看下一文…… 作者:张传波创新工场创业课堂(敏捷课程)讲师软件研发管理资深顾问CMMI首席专家《火球——UML大战需求分析》作者www.umlonline.org创办人
相关文章推荐
- 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
- Net设计模式实例之访问者模式(Visitor Pattern)
- 《大话设计模式》——学习笔记之"行为型模式"(观察者&模板方法&命令&状态&职责链&解释器&中介者&访问者&策略&备忘录&迭代器)
- 【设计模式】访问者模式 Visitor pattern
- 从头认识设计模式-策略模式-02-解决方向一:在继承里面增加导入导出方法
- 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
- Net设计模式实例之访问者模式(Visitor Pattern)
- c++ 访问者模式(visitor pattern)
- django -- 为模式增加方法
- 24种设计模式--访问者模式【Visitor Pattern】
- DP-访问者模式(Visitor Pattern)
- Net设计模式实例之访问者模式(Visitor Pattern)
- Visitor Pattern(访问者模式)
- 《硬啃设计模式》 第26章 万能排序 - 模板方法模式(Template Method Pattern)
- 设计模式(二十):访问者模式、迭代器模式、观察者模式、原型模式、模板方法
- 二十四种设计模式:访问者模式(Visitor Pattern)
- 设计模式之十五:访问者模式(Visitor Pattern)
- 设计模式(行为型)之访问者模式(Visitor Pattern)
- 访问者模式【Visitor Pattern】
- JAVA设计模式之 访问者模式【Visitor Pattern】