访问者模式

定义

表示一个作用于某个对象结构的各元素的操作。他是你可以在不改变元素的类的前提下定义作用于这些元素的操作

结构与说明

Visitor : 访问者接口,为所有的访问者申明一个visit的方法,用来代表为对象结构添加的功能
ConcreteVisitor : 具体的访问者实现对象,实现visit中的方法
Element : 抽象元素对象,即被访问的对象,通常会回调访问者的真实功能,需要定义一个accept方法接受visitor对象,或者定义一个visitor的成员对象,使用set方法传递,建议accept方法,即传即用。
ConcreteElement: 实现accept方法,一般直接调用visitor.visit(this)方法;参数可以自定义。
ObjectStructure : 对象结构,通常包含对于被访问的对象。

实现

public interface Visitor{
    //对A元素遍历操作
    public void visitA(ElementA A);
    //对B元素遍历操作
    public void visitB(ElementB B);
}
public class ConcreteVisitor1 implemets Visitor{
     //对A元素遍历操作
    public void visitA(ElementA A){
        doSomething;
        通常会调用A的一些函数,一起完成操作
    }
    //对B元素遍历操作
    public void visitB(ElementB B){
        doSomething;
        通常会调用B的一些函数,一起完成操作
    }
}
//其他的访问方式
public class ConcreteVisitor2 implemets Visitor{
    .....
}
public abstract class Element{
    public abstract void accept(Visitor visitor);
}
public class ElementA extends Element{
    ....//封装的函数和数据
    public void accept(Visitor visitor){
        visitor.visit(this)
    }
}
public class ElementB extends Element{
    ....//封装的函数和数据
    public void accept(Visitor visitor){
        visitor.visit(this)
    }
}
public class ObjectStructure{

    private Collection<Element> col = new ArrayList<Element>();
    public void handleRequest(Visitor visitor)
    {
        for(Element e :col){
            e.accept(visitor);
        }
    }
    //其他的一些函数和成员的封装
}

使用访问者模式,实现了两次分发技术,即accept和visit各一次,就本质而言:预留同路,回调实现

No Final is final
By  Xu.j.h
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值