zoukankan      html  css  js  c++  java
  • 访问者模式

    抽象访问者(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());
        }
    
    }
  • 相关阅读:
    POJ
    POJ-2253 Frogger(最短路)
    背包问题(转自背包九讲+对应题目)
    POJ-1860 Currency Exchange (最短路)
    Bellman-Ford 最短路径算法
    POJ-3295 Tautology (构造)
    POJ-2586 Y2K Accounting Bug 贪心
    POJ 2965 The Pilots Brothers' refrigerator (暴力枚举)
    python(pymysql操作数据库)
    python复习概念__oop中
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7231722.html
Copyright © 2011-2022 走看看