23种设计模式之python实现--visitor模式
来源:互联网 发布:买手机哪几个淘宝网好 编辑:程序博客网 时间:2024/06/03 14:36
这个模式涉及到双分派,一直没有好好理解,加上前几天参加面试把最后一个设计模式搁了下来,这次重新看设计模式好好理解了一下,在C++中关于双分派可以参考http://my.oschina.net/coolwater/blog/27676,不过他举的例子有点复杂,简单一点就是:
#include<iostream>using namespace std;class A{};class B:public A{};class C{public: void single(A &a){ cout<<"A_C"<<endl; }; void single(B &b){ cout<<"B_C"<<endl; };};int main(){ C test=C(); A *a=new A(); A *b=new B(); test.single(*a); test.single(*b);}由于C++在静态编译时支持多分派,但分派取决于申明类型,所以输出的都是A_C,对于解决就像是文中提到的使用多态以及参数的往来传递实现动态的双重分派了,对于python没有指针的概念,所以上面的代码一定能输出A_C和B_C,不过为了模拟visitor参数的往来传递,我通过python实现文章中的解决办法
#理解#关键是双分派的理解#例子#http://my.oschina.net/coolwater/blog/27676#Elementclass Problem: def getProblem(self,s):#accept print "一般问题", s.solve(self)class SpecialProblem(Problem): def getProblem(self,s): print "特殊问题", s.solve(self)#visitorclass Supporter: def solve(self,p): print "由一级支持解决"class SeniorSupporter(Supporter): def solve(self,p): print "由资深支持解决"#clientif __name__=="__main__": s=Supporter() ss=SeniorSupporter() p=Problem() sp=SpecialProblem() p.getProblem(s) p.getProblem(ss) sp.getProblem(s) sp.getProblem(ss)
运行结果如图:
到这里,23种设计模式就全部用python实现了,明天写一下总结,这个话题就结束了。
0 0
- 23种设计模式之python实现--visitor模式
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之 visitor
- 设计模式之Visitor
- 23设计模式之访问者模式(Visitor)
- 23设计模式之访问者模式(Visitor)
- 设计模式之23 - 访问者模式Visitor
- 23种设计模式之访问者模式(Visitor)
- 【23种设计模式】之 访问者模式(Visitor Pattern )
- 设计模式之visitor模式
- 23种设计模式(20)--Visitor模式
- 设计模式之Visitor(转)
- 查看: 35330 | 回复: 9 打印 上一主题 下一主题 [学习共享] 转:Shell 编程--本文结合大量实例阐述如何编写一个shell脚本
- 心情日志
- poj3233-矩阵构造
- 数据结构:区域染色问题
- 乔布斯斯坦福毕业演讲
- 23种设计模式之python实现--visitor模式
- OC基础—description方法、SEL类型
- 为SharePoint列表数据创建树视图结构
- hdu 4597 Play Game(记忆化搜索)
- 用node.js制作DNS解释网站
- java中的抽象类
- Redis学习笔记2-Redis的安装体验
- 有关Android Usb Host开发
- Nagios 4.0.1版本安装 适用于RHEL/Centos 5.x/6.x 或者Fedora 17/18/19(一)