访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构(Element)进行分离,数据结构的类只需要提供对"访问者"开放的接口(API),而对元素的具体处理则作交给访问者(Visitor)负责。

访问者模式中的角色:
Visitor:表示访问者的抽象类,用于声明对数据结构中xxx元素访问的visit(xxx)方法。
ConcreteVisitor:表示具体的访问者,继承Visitor并对其声明的抽象方法提供具体实现。
Element:表示元素的抽象类,即访问者实际要访问的对象,Element角色需要对访问者提供一个开放的接口,即accept方法,该方法的参数就是Visitor角色。
ConcreteElement:表示具体的元素,提供accept方法的实现。
ObjectStructure:负责处理Element元素的集合,即表示数据结构的类。
类图:

Element.m

classdef Element < handle & matlab.mixin.Heterogeneous
methods(Abstract)
accept(~,~);
end
end

ElementA.m

classdef ElementA < Element
methods
function accept(obj,visitor)
visitor.visitElementA(obj);
end
function operationA(~)
disp("this is OperationA")
end
end
end

ElementB.m

classdef ElementB < Element
methods
function accept(obj,visitor)
visitor.visitElementB(obj);
end
function operationB(~)
disp("this is OperationB")
end
end
end

Visitor.m

classdef Visitor < handle
methods(Abstract)
visitElementA(~,~);
visitElementB(~,~);
end
end

ConcreteVisitorA.m

classdef ConcreteVisitorA < Visitor
methods
function visitElementA(~,element)
disp("ConcreteVisitorA 访问 ElementA");
element.operationA();
end
function visitElementB(~,element)
disp("ConcreteVisitorA 访问 ElementB");
element.operationB();
end
end
end

ConcreteVisitorB.m

classdef ConcreteVisitorB < Visitor
methods
function visitElementA(~,element)
disp("ConcreteVisitorB 访问 ElementA");
element.operationA();
end
function visitElementB(~,element)
disp("ConcreteVisitorB 访问 ElementB");
element.operationB();
end
end
end

ObjectStructure.m

classdef ObjectStructure < handle
properties
elements = Element.empty();
end
methods
function handleRequest(obj,visitor)
for i = 1:length(obj.elements)
obj.elements(i).accept(visitor);
end
end
function addElement(obj,ele)
obj.elements(end + 1) = ele;
end
end
end

 测试代码:

os = ObjectStructure();
eleA = ElementA();
eleB = ElementB();
os.addElement(eleA);
os.addElement(eleB);
visitor = ConcreteVisitorA();
os.handleRequest(visitor);

 参考资料:

https://blog.csdn.net/iluojie/article/details/80382901

https://blog.csdn.net/SomeoneMH/article/details/80591429

Matlab访问者模式的更多相关文章

  1. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  2. 访问者模式(visitorpattern)

    /** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块 ...

  3. C#设计模式-访问者模式

    一. 访问者(Vistor)模式 访问者模式是封装一些施加于某种数据结构之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保存不变.访问者模式适用于数据结构相对稳定的系统, 它把数据结 ...

  4. C#设计模式系列:访问者模式(Visitor)

    1.访问者模式简介 1.1>.定义 作用于某个对象群中各个对象的操作,可以使在不改变对象本身的情况下,定义作用于对象的新操作. 1.2>.使用频率   低 2.访问者模式结构 2.1> ...

  5. php实现设计模式之 访问者模式

    <?php /** * 访问者模式 * 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. * 行为类模式 */ /** 抽象访问者:抽象类或 ...

  6. 十一个行为模式之访问者模式(Visitor Pattern)

    定义: 提供一个作用于某对象结构(通常是一个对象集合)的操作的接口,使得在添加新的操作或者在添加新的元素时,不需要修改原有系统,就可以对各个对象进行操作. 结构图: Visitor:抽象访问者类,对元 ...

  7. 访问者模式(Visitor Pattern)

    定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. Visitor 抽象访问者角色:为该对象结构中具体元素角色声明一个访问操作接口.该操作接口 ...

  8. JAVA 设计模式 访问者模式

    用途 访问者模式 (Visitor) 表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式是一种行为型模式. 用途

  9. 22.访问者模式(Vistor Pattern)

    using System; using System.Collections; namespace ConsoleApplication5 { /// <summary> /// 访问者模 ...

随机推荐

  1. 用ant.design的设计注意点---表单

    设计的时候,输入表单项 最好放在一起,不要散落在页面各处,会导致表单项穿插存储数据,穿插验证表单,表单的样式设计要严格按照ant的版来,因为表单是交互最多最容易出错的地方,否则浪费太多工作量 持续集成 ...

  2. (HK1-0)激活与配置摄像机

    HK使用手册 网络连接 激活与配置摄像机 网络摄像机可通过 SADP 软件.客户端软件和浏览器三种方式激活, 具体激活操作方式可参见<网络摄像机操作手册>. 1. 安装随机光盘或从官网下载 ...

  3. win +R

    一.电脑设置免登录密码及修改密码 1.win+R 2.输入control userpasswords2 3.勾选免密码账号登陆,修改密码 二.打开性能监视器 1.win+R 2.输入perfmon.e ...

  4. Kali系统改国内源配置和SSH配置

    一.Kali系统更新源 使用官网的虚拟化镜像安装,默认为英文界面,更新源也是官方源.因为官方服务器在国外,速度不是很理想,现在就来改国内源并且更新系统. 1.使用编辑器打开系统源文本(在终端内操作,先 ...

  5. day 19

    If you think you can, you can. And if you think you can't, you're right.

  6. LOJ6625 时间复杂度(min_25筛)

    本人在LOJ的第三题(前两题太水不好意思说了QwQ),欢迎大家踩std. 题目链接:LOJ 题目大意:定义函数 $f$:($minp$ 表示最小质因子) $$f(x)=\begin{cases}0&a ...

  7. python3 获取日期时间

    #!/usr/bin/python3 import time # 格式化成2016-- ::39形式 print (time.strftime("%Y-%m-%d %H:%M:%S" ...

  8. Sql Server怎样设置sa用户登录

    首先,我门打开数据库管理工具,用windows方式登录,windows只能本机登录,这样远程的客户端就登录不了,我们目前就是为了开启sa登录,使远程客户端也能访问数据库,看下图,windows方式登录 ...

  9. Orm 配置说明

    一.在线技术文档: http://files.cnblogs.com/files/humble/d.pdf   二.使用的大致流程   1.首先下载代码生成器,可以一键生成项目Model层;(其中含有 ...

  10. 【07月03日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 兰州民百(SH600738) - ROE_TTM:86.45% - ...