【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

不知不觉当中,我们就到了最后一种设计模式,即访问者模式。访问者模式,听上去复杂一些。但是,这种模式用简单的一句话说,就是不同的人对不同的事物有不同的感觉。比如说吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,不同的地方的人未必都喜欢这两种豆腐。四川的朋友可能更喜欢辣豆腐,江浙的人就可能对臭豆腐更喜欢一些。那么,这种情况应该怎么用设计模式表达呢?

typedef struct _Tofu
{int type;void (*eat)   (struct _Visitor* pVisitor, struct _Tofu* pTofu);
}Tofu;typedef struct _Visitor
{int region;void (*process)(struct _Tofu* pTofu, struct _Visitor* pVisitor);
}Visitor;

就是这样一个豆腐,eat的时候就要做不同的判断了。

void eat(struct _Visitor* pVisitor, struct _Tofu* pTofu)
{assert(NULL != pVisitor && NULL != pTofu);pVisitor->process(pTofu, pVisitor);
}

既然eat的操作最后还是靠不同的visitor来处理了,那么下面就该定义process函数了。

void process(struct _Tofu* pTofu, struct _Visitor* pVisitor)
{assert(NULL != pTofu && NULL != pVisitor);if(pTofu->type == SPICY_FOOD && pVisitor->region == WEST ||pTofu->type == STRONG_SMELL_FOOD && pVisitor->region == EAST){printf("I like this food!\n");return;}printf("I hate this food!\n");
}

C语言和设计模式(访问者模式)相关推荐

  1. 设计模式---访问者模式

    访问者模式 介绍 定义及使用场景 UML类图 角色 财务案例 个人心得体会 静态分派以及动态分派 静态分派 动态分派 访问者模式中的伪动态双分派 对访问者模式的一些思考 总结 优点 缺点 适用性 参考 ...

  2. 设计模式 访问者模式

    文章目录 访问者模式 访问者模式实战 访问者模式 在相同的数据结构下, 增加容易变化的业务访问逻辑, 为了增强扩展性, 将易变的访问逻辑进行解耦的一种设计模式. 访问者模式实战 模拟学校中, 有老师和 ...

  3. C语言实现设计模式—模板模式

    文章目录 C语言实现设计模式-模板模式 模板模式介绍 UML用例说明 实际场景使用 框架结构[共用框架]-通用的串口协议分析函数 不同实现-数据类型区别 C语言实现设计模式-模板模式 模板模式介绍 在 ...

  4. C++设计模式——访问者模式(visitor pattern)

    一.原理讲解 1.1意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 1.2应用场景 一个对象结构包含很多类对象,它们有不同的接口,而你 ...

  5. Windows环境下实现设计模式——访问者模式(JAVA版)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现访问者模式(设计模式). 不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式, ...

  6. java设计模式---访问者模式

      Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自 己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自 ...

  7. yii2通过url访问类中的方法_行为型设计模式 访问者模式

    author zong email zongzhe1996@163.com 介绍 在访问者模式中,通过使用一个访问者类,可以改变元素类(被访问者)的执行算法.元素类的执行算法可以随着访问者的改变而改变 ...

  8. C++设计模式-访问者模式

    目录 基本概念 代码与实例 基本概念 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作. UML图如下(此图来源于大 ...

  9. PHP设计模式——访问者模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 访问者模式表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. UML类图: 角色 ...

  10. C#设计模式——访问者模式(Vistor Pattern)

    一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...

最新文章

  1. ETC带火车牌识别设备 多方企业狭路相逢
  2. 寒假每日一题(入门组)【week6 完结】
  3. latex支持python吗_用MarkDown和Python编写LaTex
  4. CAD:计算三角形的外接圆圆心
  5. 局域网计算机加密共享文件,局域网共享文件,小编教你局域网共享文件怎么加密...
  6. 数字信号处理——有限长离散变换
  7. 华氏温度转换为摄氏温度
  8. STM32F103C8T6在Arduino框架下驱动SH1106 1.3“ IIC OLED显示
  9. 2022-2028全球及中国电动汽车充电站和充电桩行业研究及十四五规划分析报告
  10. 1635-超大型 LED 显示屏 ZCMU
  11. 音乐在线教育解决方案,打造在线教育高品质教学体验
  12. 每日一句_《定风波·暮春漫兴》
  13. C语言中怎么表示派 -π
  14. PTA阿泽的交友标准
  15. 教你把Pycharm编辑器更改为黑色主题
  16. 计算机专业课程学习顺序
  17. 获取三维线条的笔画 - Inventor 2013新功能
  18. python之泊松融合
  19. linux 应用程序 键盘,在基于 Web 的 VNC 应用程序中支持多种键盘布局
  20. 在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分

热门文章

  1. 佛山高新区构建大数据产业新生态
  2. JavaScript效果之选项卡
  3. Flex接受任意拖拽
  4. 通过PEB遍历进程模块(x64/wow4)
  5. aspnet 后台调用前台js函数
  6. JAVA框架--hibernate、struts2、spring
  7. Linux Unix shell 编程指南学习笔记(第五部分)
  8. Python字典的操作与使用
  9. android 55
  10. 单片机定时器中断原理