Visitor(访问者模式)
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类(男人,女人)的前提下定义作用于这些元素的新操作(喜怒哀乐)。他把数据结构(男人,女人)和作用于数据结构之上的操作(喜怒哀乐)之间的耦合解脱开,使得操作集合可以相对自由地演化
访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。
VC.m
/*
HCDConcreteElementA和HCDConcreteElementB相当于男人女人(固定不变),当男人女人接收到喜怒哀乐(HCDConcreteVisitor1,HCDConcreteVisitor2)有不同的结果。HCDObjectStructure用于管理他们之间的关系。
*/
HCDObjectStructure *o = [[HCDObjectStructure alloc]init];
//初始化不同的element对象
HCDConcreteElementA *eA = [HCDConcreteElementA new];
HCDConcreteElementB *eB = [HCDConcreteElementB new];
//加入o对象里面,存在一个数据结构o中。
[o attach:eA];
[o attach:eB];
//初始化不同的visitor对象。
HCDConcreteVisitor1 *v1 = [HCDConcreteVisitor1 new];
HCDConcreteVisitor2 *v2 = [HCDConcreteVisitor2 new];
//eA,eB(男人女人)接收到访问者v1(喜)的不同反应。
[o accept: v1];
NSLog(@"================================");
//eA,eB(男人女人)接收到访问者v2(怒)的不同反应。
[o accept: v2];
HCDObjectStructure.h
@interface HCDObjectStructure : NSObject
{
NSMutableArray *elements;
}
//添加和删除element
-(void)attach:(HCDElements *)element;
-(void)detach:(HCDElements *)element;
//接受一个visitor
-(void)accept:(HCDVisitors *)visitor;
@end
HCDObjectStructure.m
@implementation HCDObjectStructure
-(instancetype)init{
self = [super init];
if (self) {
elements = [[NSMutableArray alloc]init];
}
return self;
}
-(void)attach:(HCDElements *)element{
[elements addObject:element];
}
-(void)detach:(HCDElements *)element{
[elements removeObject:element];
}
-(void)accept:(HCDVisitors *)visitor{
for (HCDElements *e in elements) {
[e accept:visitor];
}
}
@end
网友评论