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

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

设计图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【学习难度:★★☆☆☆,使用频率:★★★☆☆】直接出处:访问者模式梳理和学习:https://github.com...
    BruceOuyang阅读 4,503评论 2 2
  • 访问者模式(行为型) 一、相关概述 访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成...
    哈哈大圣阅读 2,972评论 0 0
  • 1 意图 表示一个作用于某对象结构中的各元素操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。...
    10xjzheng阅读 3,635评论 0 0
  • 目录 本文的结构如下: 引言 什么是访问者模式 模式的结构 典型代码 访问者模式中的伪动态双分派 代码示例 访问者...
    w1992wishes阅读 4,377评论 0 6
  • 人生本是一场辛苦的修行 烦恼伴着忧愁 痛苦抱着哀伤 不知何时是起点 不知何时又终止 仰望着头上的夜空 繁星点点 月...
    九月东川阅读 1,391评论 0 3

友情链接更多精彩内容