概述
访问者模式
定义
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
使用场景
对象结构比较稳定,但经常需要在此对象结构上定义新的操作。
需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。
涉及角色编辑
- Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。
- ConcreteVisitor.具体访问者角色,实现Visitor声明的接口。
3.Element 定义一个接受访问操作(accept()),它以一个访问者(Visitor)作为参数。 - ConcreteElement 具体元素,实现了抽象元素(Element)所定义的接受操作接口。
- ObjectStructure 结构对象角色,这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素;如有需要,可以设计成一个复合对象或者一个聚集(如一个列表或无序集合)。
UML类图:
代码实现:
public interface IVisitor {
public void accept(ConcreteElement1 el1);
public void accept(ConcreteElement2 el2);
}
public class Visitor implements IVisitor {
@Override
public void accept(ConcreteElement1 el1) {
el1.doSomething();
}
@Override
public void accept(ConcreteElement2 el2) {
el2.doSomething();
}
}
public abstract class Element {
public abstract void doSomething();
public abstract void accept(IVisitor visitor);
}
public class ConcreteElement1 extends Element {
@Override
public void doSomething() {
// TODO Auto-generated method stub
}
@Override
public void accept(IVisitor visitor) {
visitor.accept(this);
}
}
public class ConcreteElement2 extends Element {
@Override
public void doSomething() {
// TODO Auto-generated method stub
}
@Override
public void accept(IVisitor visitor) {
visitor.accept(this);
}
}
public class ObjectStruture {
public static Element createElement(){
Random rand = new Random();
if(rand.nextInt(100)> 50){
return new ConcreteElement1();
}else{
return new ConcreteElement2();
}
}
}
public class Client {
public static void main(String[] args) {
Element e = ObjectStruture.createElement();
e.accept(new Visitor());
}
}
最后
以上就是拉长人生为你收集整理的设计模式学习笔记——19 访问者模式的全部内容,希望文章能够帮你解决设计模式学习笔记——19 访问者模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复