Matlab访问者模式
访问者(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访问者模式的更多相关文章
- .NET设计模式访问者模式
一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...
- 访问者模式(visitorpattern)
/** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块 ...
- C#设计模式-访问者模式
一. 访问者(Vistor)模式 访问者模式是封装一些施加于某种数据结构之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保存不变.访问者模式适用于数据结构相对稳定的系统, 它把数据结 ...
- C#设计模式系列:访问者模式(Visitor)
1.访问者模式简介 1.1>.定义 作用于某个对象群中各个对象的操作,可以使在不改变对象本身的情况下,定义作用于对象的新操作. 1.2>.使用频率 低 2.访问者模式结构 2.1> ...
- php实现设计模式之 访问者模式
<?php /** * 访问者模式 * 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. * 行为类模式 */ /** 抽象访问者:抽象类或 ...
- 十一个行为模式之访问者模式(Visitor Pattern)
定义: 提供一个作用于某对象结构(通常是一个对象集合)的操作的接口,使得在添加新的操作或者在添加新的元素时,不需要修改原有系统,就可以对各个对象进行操作. 结构图: Visitor:抽象访问者类,对元 ...
- 访问者模式(Visitor Pattern)
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. Visitor 抽象访问者角色:为该对象结构中具体元素角色声明一个访问操作接口.该操作接口 ...
- JAVA 设计模式 访问者模式
用途 访问者模式 (Visitor) 表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式是一种行为型模式. 用途
- 22.访问者模式(Vistor Pattern)
using System; using System.Collections; namespace ConsoleApplication5 { /// <summary> /// 访问者模 ...
随机推荐
- 第10节-BLE协议链路层(LL)
本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和 ...
- IE zoom:1
overflow:hidden zoom:1 一起出现克服IE6 bug display:inline-block display:inline zoom:1 一起出现克服IE6bug
- oneinstack——证书更新
如果你安装好 oneinstack 你的定时任务就会自动添加 "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh ...
- 重新学习Spring注解——声明式事务
36.声明式事务-环境搭建 37.声明式事务-测试成功 38.[源码]-声明式事务-源码分析 /** * 声明式事务: * * 环境搭建: * 1.导入相关依赖 * 数据源.数据库驱动.Spring- ...
- B 题解————2019.10.16
相信他说的话,但不要当真 [题目描述]有一个长度为 n 的自然数序列 a,要求将这个序列恰好分成至少 m 个连续子段. 每个子段的价值为该子段的所有数的按位异或.要使所有子段的价值按位与的结果最大,输 ...
- FFT学习
看了一天的多项式的内容,看博客的时候好像还是那么回事,一看题,哇塞,发现我其实连卷积是啥都没看懂. qtdydb,背板子. 不知道卷积是啥就很伤了. P3803 [模板]多项式乘法(FFT) #inc ...
- Windows平台搭建NodeJs开发环境以及HelloWorld展示—图解
Windows 7系统下搭建NodeJs开发环境(NodeJs+WebStrom)以及Hello World!展示,大体思路如下:第一步:安装NodeJs运行环境.第二步:安装WebStrom开发工具 ...
- Echarts数据更新大坑
今天使用了一个Echarts来实现柱状图和直线图统计组合,每次通过axios(ajax库)来请求新数据来刷新数据,但是发现请求数据确实是对应变化到了options变量中,后台数据条数只有一条,但是图表 ...
- haproxy 配置文件详解 之 defaults
配置示例: defaults mode http retries timeout connect 10s timeout client 20s timeout server 30s timeout c ...
- LEDE安装zerotier 无法启动解决方法
进入命令行模式,vi /etc/config/zerotier文件,把option enabled '0'的0改为1.