访问者模式的概念:访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作
个人觉得,上述概念用到的基本术语才是这个模式难学的根本.
我所理解的访问者模式:就是找出操作的通用部分封装起来,然后在大量需要该操作的时候,都只要通过这一个接口,好处是什么?
我举个例子:
1.我有一个数字列表:[(1,2),(3,4),(5,6),...,(n,m)] 其中(1,2)等表示用于一组操作的数据(也可以理解成一个对象)
2.我要对每一对数字(如1和2,又如3和4),进行打印他们的和
假如只考虑[(1,2),(3,4),(5,6)]
如果直接不采用任何方法来优化,我会这样写
Python代码:
lst = [(1,2),(3,4),(5,6)]
for x, y in lst:
print x+y
C代码:
#include<stdio.h>
struct node {
int x,y;
}nod;
int main(void){
struct node lst[3] = {{1,2},{3,4},{5,6}};
int i;
for(i=0;i<3;i++){
printf("%dn",lst[i].x+lst[i].y);
}
return 1;
}
如果应用到访问者模式,我会这样写
Python代码:
def PrintValue(tup):
print sum(tup)
lst = [(1,2),(3,4),(5,6)]
for tup in lst:
PrintValue(tup)
C代码:
#include<stdio.h>
struct node {
int x,y;
}nod;
void PrintValue(struct node nd){
printf("%dn",nd.x+nd.y);
}
int main(void){
struct node lst[3] = {{1,2},{3,4},{5,6}};
int i;
for(i=0;i<3;i++){
PrintValue(lst[i]);
}
return 1;
}
看完之后你就发现,对了,就是封装,然后简化成一个通用的操作来使用
于是我们来解析上述的概念:
1.表示一个作用于某对象结构中的各元素的操作:代码中lst就相当于对象,各元素就不用我解释了吧?如lst[0]的就是其中一个,即(1,2).
2.它使我们可以在不改变各元素的类的前提下:这才是重点,不改变元素的类,即元素的结构,如你把(1,2)变成(3,4)这叫没改变,但是你改成(3,4,5)那就改变了,为什么?多了个数字啊.
3.定义作用于这些元素的新操作:这里有一个关键字”这些”,错了是词^^,这些元素的新操作,这个操作要能作用于这些元素,那么有一点肯定符合,那就是通用,于是用这一个操作接口,就能对n多个这种”类”的元素进行处理了.
说到底,就是你的数据能被你找到通用性,然后将通用的部分封装成”访问者模式”中的”被访问者”,然后每个数据就只要访问它就能享受它的操作了,同时新增的数据也一定要符合这个通用性.
说到这个模式难理解,我也花了几个小时,最终找到一个实例才理解的.最后发现蛮操蛋的,就是封装起来吧,网上的代码都写得那么玄乎,不过这篇博文仅代表个人理解和看法,可受任何怼.
相关知识
9月11日宠物胶囊出售 可封装节日宠物
投放展示广告系列之后,小琳的在线宠物店吸引到了可观的流量。遗憾的是,很多访问者浏览了她的网店后没有购买任何东西。为了再次与这些访问者互动,小琳制作新的展示广告系列时应该选择哪个营销目标?()
宠物玩具机芯心跳盒毛绒玩具震动心跳模拟器婴儿安抚心跳震动盒
国外博客大全.doc
花色A MAOGOUBLUE猫咪牵引绳防挣脱超炫配色原创设计宠物猫咪背带参数配置
场景模式专题|宠物模式 – 人人都是产品经理,
行为治疗模式
1颗MiP灯珠价格=1组RGB芯片,如何实现?
【13.56MHZ动物耳标/15693协议宠物电子耳环/RFID猪耳标签13.56MHZ动物耳标/15693协议宠物电子耳环/RFID猪耳标签】价格
模式生物:小鼠
网址: 访问者模式==封装?? https://m.mcbbbk.com/newsview186715.html
上一篇: 好书分享——《园林绿化养护与管理 |
下一篇: EeeorCode= |