美文网首页
行为型之十一-访问者模式

行为型之十一-访问者模式

作者: iOS_肖晨 | 来源:发表于2017-10-10 13:48 被阅读1次

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

设计图

相关文章

网友评论

      本文标题:行为型之十一-访问者模式

      本文链接:https://www.haomeiwen.com/subject/qjpvyxtx.html