码迷,mamicode.com
首页 > 其他好文 > 详细

访问者模式

时间:2017-10-25 01:01:54      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:ack   tee   接口   str   system   div   rri   参数传递   abstract   

抽象访问者(Visitor):声明所有访问者需要的接口

具体访问者(ConcreteVisitor):实现抽象访问者声明的接口

抽象节点元素(Element):提供一个接口,能够接受访问者作为参数传递给节点元素

具体节点元素(ConcreteElement):实现抽象节点元素声明的接口

结构对象(ObjectStructure):提供一个接口,能够访问到所有的节点元素,一般作为一个集合特有节点元素的引用

客户端(Client):分别创建访问者和节点元素的对象,调用访问者访问变量节点元素

 

visitor

package design.pattern.visitor;

public interface Visitor {

    public void visit(Element element);

}

element

package design.pattern.visitor;

public abstract class Element {
    protected String type;
    public Element(String type) {
        this.type = type;
    }
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
    public String getType() {
        return this.type;
    }
}

objectstructure

package design.pattern.visitor;

public class ObjectStructure {
    private Element arr = new ConcreteElement("ConcreteElement");
    private Visitor visitor;
    
    public void setVisitor(Visitor visitor) {
        this.visitor = visitor;
    }
    
    public void print() {
        if (null == visitor)
            throw new RuntimeException();
        arr.accept(visitor);
    }
}

concreteelement

package design.pattern.visitor;

public class ConcreteElement extends Element {

    public ConcreteElement(String type) {
        super(type);
    }

}

concretevisitora

package design.pattern.visitor;

public class ConcreteVisitorA implements Visitor {

    @Override
    public void visit(Element element) {
        System.out.println("ConcreteVisitorA visit " + element.getType());
    }

}

concretevisitorb

package design.pattern.visitor;

public class ConcreteVisitorB implements Visitor {

    @Override
    public void visit(Element element) {
        System.out.println("ConcreteVisitorB visit " + element.getType());
    }

}

 

访问者模式

标签:ack   tee   接口   str   system   div   rri   参数传递   abstract   

原文地址:http://www.cnblogs.com/m2492565210/p/7231722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!