• 访问者模式


    抽象访问者(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());
        }
    
    }
  • 相关阅读:
    JavaWeb 之 表单重复提交问题
    JavaWeb 之 验证码
    JavaScript 之 AJAX 请求
    JavaWeb 之 i18N 国际化
    JavaWeb 之 Gson 的使用
    JavaScript 之 JSON 对象
    JavaWeb 之 由 Tomcat 展示友好的错误信息页面
    【LeetCode-动态规划】完全平方数
    【LeetCode-递归】至少有K个重复字符的最长子串
    【LeetCode-设计】常数时间插入、删除和获取随机元素
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7231722.html
Copyright © 2020-2023  润新知