访问者模式中的角色:客户方、访问者、被访问者
应用场景:被访问者元素变化较小或不改变。访问者中的方法经常改变。
访问的方法都在访问者中定义。被访问者实现统一接口中的方法,具体方法委托给访问者中的方法实现。
被访问者接口:
/**
* 被访问者接口
*/
public interface Visitable {
/**
* 定义
*/
public String getDefinition(Visitor visitor);
}
被访问者(高富帅):
public class Gaofushuai implements Visitable {
private String personDefinition = "高富帅:高富帅";
@Override
public String getDefinition(Visitor visitor) {
return visitor.getGaofushuaiDefinition(this);
}
public String getPersonDefinition() {
return personDefinition;
}
public void setPersonDefinition(String personDefinition) {
this.personDefinition = personDefinition;
}
}
被访问者(屌丝):
public class Diaosi implements Visitable{
private String personDefinition = "屌丝:穷矮矬";
@Override
public String getDefinition(Visitor visitor) {
return visitor.getDiaosiDefinition(this);
}
public String getPersonDefinition() {
return personDefinition;
}
public void setPersonDefinition(String personDefinition) {
this.personDefinition = personDefinition;
}
}
访问者接口:
/**
* 访问者
*/
public interface Visitor {
/*
* 屌丝定义
*/
public String getDiaosiDefinition(Diaosi diaosi);
/*
* 高富帅定义
*/
public String getGaofushuaiDefinition(Gaofushuai gaofushuai);
}
访问者接口实现(人员访问者):
public class PersonVisitor implements Visitor {
public void visitPerson(List<Visitable> list){
Iterator it = list.iterator();
while (it.hasNext()) {
Visitable visitable = (Visitable)it.next();
System.out.println(visitable.getDefinition(this));
}
}
@Override
public String getDiaosiDefinition(Diaosi diaosi) {
return diaosi.getPersonDefinition();
}
@Override
public String getGaofushuaiDefinition(Gaofushuai gaofushuai) {
return gaofushuai.getPersonDefinition();
}
}
客户端访问:
public class VisitorClient {
public static void main(String[] args) {
List<Visitable> list = new ArrayList<Visitable>();
list.add(new Diaosi());
list.add(new Gaofushuai());
new PersonVisitor().visitPerson(list);
}
}
访问结果:
屌丝:穷矮矬
高富帅:高富帅
分享到:
相关推荐
设计模式C++学习之访问者模式(Visitor)
访问者模式(Visitor) 用意:适用于数据结构相对未定的系统,把数据结构和作用于结构上的操作间的耦合解开。
C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式
C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载
访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...
访问者模式(Java代码实现),博文附件
面向对象 北工大 课设 使用多种设计模式,实现的求值引擎,包括表达式树的构建
设计模式 -访问者(Visitor)模式详解和应用.pdf
Visitor(访问者模式)属于行为型模式。意图:表示一个作用于某对象结构中的各元素的操作。
我觉得Visitor模式是在补修改已有程序结构前提下,通过添加额外的访问者完成对代码功能的拓展 为什么这样用?当你的类层次较多,在某层结构中增加新的方法,要是在基类上面添加或者变更,可能破坏原来的设计, 有...
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。...
主要介绍了iOS应用的设计模式开发中的Visitor访问者模式的实例,示例代码为传统的Objective-C,需要的朋友可以参考下
C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.rar 李建忠主讲 上海祝成信息科技有限公司担任软件架构师,并讲授C#/.NET软件开发课程
访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
本文实例讲述了C#设计模式之Visitor访问者模式解决长隆欢乐世界问题。分享给大家供大家参考,具体如下: 一、理论定义 访问者模式 提供了 一组 集合 对象 统一的 访问接口,适合对 一个集合中的对象,进行逻辑操作,...
访问者模式表示一个作用于某对象结构中各元素的操作。它可以在不修改各元素类的前提下定义作用于这些元素的新操作,即动态的增加具体访问者角色。 访问者模式利用了双重分派。先将访问者传入元素对象的Accept方法中...
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。System.Collection命名空间下提供了大量集合操作对象。但大多数情况下处理的都是...