[GoF设计模式]Composite模式和Visitor模式的C++实现

【Composite模式】

 组合模式的关键是抽象类,它既可以代表图元(Leaf),也可以代表图元的容器(Composite)。组合模式可以用于创建树状的结构。用于使用抽象类接口与组合结构中的对象进行交互。如果接收是一个叶结点,则直接处理请求。如果接受者是Composite,它将请求发送给他的子部件,即图元,在转发请求之前或者之后可以进行辅助的操作。组合模式可以用于递归地创建树形结构。组合模式的重点在于构造类,而Decorator模式的重点在于不生成子类即可以给类添加职责。

【图解】一副图片可以由子图片以及图元。如一副图片由线图元、矩形图元、里头还嵌了个子图片,该子图片由文本图元、线图元、矩形图元构成。

 

 

 

 

【程序】

1

 

 

 

 

 

 

【输出】

1

 

 

【Visitor模式】

访问者模式的作用是表示作用于某对象结构中的各元素的操作,使得在不改变各元素类的前提下,定义作用于这些元素的新操作。Visitor模式提供了支持单分派(single-dispatch)语言的双分派策略。双分派(double-dispatch or multi-dispatch)是指从两个方面来说的,一个是接收着的型别(即句柄的型别),一个是函数参数运行时候的型别(用RTTI来实现的)。一般的面向对象的语言如C++/JAVA/C#都只支持单分派。这样双分派的实现在C++中可以采用两种方式,一种是函数的重载(即使参数的类别不同),另外一种则是RTTI来实现(通过typeid判断,要用到if...else...等),后者的封装性较差不提倡使用。一般而言使用前者,即函数的重载实现。

【图解】

以下以中国游客和美国游客,去中国或者去美国旅游为例子说明

2

 

【程序】

程序既给出了重载的方式实现的双分派,也给出了以RTTI方式实现的双分派,注意typeid(*elm)中要传对象参数,而不是指针类型elm,刚开始还弄错了。

 

 

 

 

 

 

 

 

【输出】

2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值