本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-10(4)

2020-11(15)

走在架构师边上的边上

发布于2021-10-05 00:16     阅读(140)     评论(0)     点赞(28)     收藏(1)



a0af4ee6e13d85759a472fc469e7eeef.png

跟妹子聊天到深夜两点,实在不敢肝了。

这里分享海纳老师的《自己动手写python虚拟机》的一段访问者设计模式代码给大家。

我在qt的命令行应用上测试可行。

8a7cac0e00d775ef6d1657aa6fe51de5.png

代码如下:

  1. #include <QCoreApplication>
  2. #include<string>
  3. #include <iostream>
  4. using namespace std;
  5. class Visitor;
  6. class Animal {
  7. public:
  8. virtual void accept(Visitor *v) {cout <<"emmm.."<<endl;}
  9. };
  10. class Dog:public Animal{
  11. public:
  12. virtual void accept(Visitor *v);
  13. };
  14. class Cat:public Animal{
  15. public:
  16. virtual void accept(Visitor *v);
  17. };
  18. class Fox:public Animal{
  19. public:
  20. virtual void accept(Visitor *v);
  21. };
  22. class Visitor{
  23. public:
  24. void visit(Animal * animal){};
  25. virtual void visit(Dog * animal){};
  26. virtual void visit(Cat * animal){};
  27. virtual void visit(Fox * animal){};
  28. };
  29. class Speaker:public Visitor{
  30. public:
  31. void visit(Animal * pa){
  32. pa->accept(this);
  33. }
  34. virtual void visit(Dog *pd) {
  35. cout <<"wang"<<endl;
  36. }
  37. virtual void visit(Cat *pc) {
  38. cout <<"miao"<<endl;
  39. }
  40. virtual void visit(Fox *pf) {
  41. cout <<"woo"<<endl;
  42. }
  43. };
  44. class Feeding:public Visitor{
  45. public:
  46. void visit(Animal * pa){
  47. pa->accept(this);
  48. }
  49. virtual void visit(Dog *pd) {
  50. cout <<"bone"<<endl;
  51. }
  52. virtual void visit(Cat *pc) {
  53. cout <<"fish"<<endl;
  54. }
  55. virtual void visit(Fox *pf) {
  56. cout <<"meat"<<endl;
  57. }
  58. };
  59. void Dog::accept(Visitor *v){
  60. v->visit(this);
  61. }
  62. void Cat::accept(Visitor *v){
  63. v->visit(this);
  64. }
  65. void Fox::accept(Visitor *v){
  66. v->visit(this);
  67. }
  68. int main(int argc, char *argv[])
  69. {
  70. QCoreApplication a(argc, argv);
  71. Animal * animals[] = {new Dog(), new Cat(), new Fox()};
  72. Speaker s;
  73. for(uint i = 0; i < sizeof(animals) / sizeof(Animal*); i++)
  74. {
  75. s.visit(animals[i]);
  76. }
  77. Feeding f;
  78. for(uint i = 0; i < sizeof(animals) / sizeof(Animal*); i++)
  79. {
  80. f.visit(animals[i]);
  81. }
  82. return a.exec();
  83. }

这里再分享一篇Java的访问者模式代码解析文章给大家。

访问者模式--年轻人和中年人的代沟 

原文链接:https://blog.csdn.net/yantuguiguziPGJ/article/details/120574578







所属网站分类: 技术文章 > 博客

作者:哇哇

链接:https://www.pythonheidong.com/blog/article/1050276/208b96a576af8c14fb57/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)