访问者模式

Posted 啊哈咧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问者模式相关的知识,希望对你有一定的参考价值。

抽象访问者(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());
    }

}

 

以上是关于访问者模式的主要内容,如果未能解决你的问题,请参考以下文章

在不存在的片段上调用片段生命周期和 onCreate 的问题

尝试使用片段保存夜间模式状态

是否有在单个活动中处理多个片段的 Android 设计模式?

片段管理访问错误可见 return false

如何访问 MainActivity() 中的片段元素?

使用绑定从片段访问父活动的 UI 元素