osg中的访问器模式

7 篇文章 0 订阅
2 篇文章 0 订阅

首先说一下visitor模式, 下面是一些大家之言:

1.Visitor模式是对在多个抽象的对象群的一种特殊处理,适合在这样一个场景:有一堆身份各异对象(通常是数据状态类),这些状态类有一些特征:被动的(数据都是被动的),需要等待外界来操作或推动。那么现在外界有一个动作来准备操作这些状态类了,但是走到面前,突然傻眼,分不清楚谁是谁啊?这些状态类可能属于不同类型的接口,怎么办?解决思路,当然把这些状态类再统一到一个接口下就可以操作了。当然,这时需要这些状态类做些修饰,有个“对外开放”的姿态,再实现一个统一接口Visitable,这个接口中提供的方法就更抽象:Accept()。其实Accept方法的具体实现是采取了Adapter模式,因为各个状态类都分属不同的接口,总不能为接受访问修改这些接口吧。

 2.visitor用多态去掉了这个type switch,并且遵循ocp, 用“容易添加新类”这个“你不需要的优势”来换取“容易添加新的方法”这个“你需要的优势”

OSG中的NodeVisitor是对访问器(visitor)模式思想的具体实现。 从本质上说,NodeVisitor类遍历了一个场景图形并为每一个被访问节点调用特定的函数。

在OSG中的visitor最关键的两个函数是apply函数,该函数决定了遍历的方式,例如可以获得各个节点的属性,也可以修改节点的属性,这完全取决于apply函数的实现,用户可以创建新的继承于NodeVisitor的类,重写apply函数,apply函数的调用对用户是透明的,用户根本不用关心;另外一个就是accept函数,用户调用该函数可以关联访问器与要访问的对象。

以下并不想具体介绍OSG中的源代码,因为实在是太庞大了,下面只是OSG中的visitor的模型:

下面是有关OSG中的visitor关系图:

 

- add 2013/7/31 dizuo 

OCP: open close principle 开-闭原则

访问器模式:通过继承方式增加新的接口,工厂模式:通过继承的方式实现虚构造函数!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值