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());
        }
    
    }
  • 相关阅读:
    ARP 协议
    3GPP 5G UPF
    OpenStack v.s. Kubernetes
    C#- FTP递归下载文件
    C#- WinForm获取 当前执行程序路径的几种方法
    C#- 布署WinForm程序
    Delphi- 连接MySQL数据库BDE
    Delphi- 内置数据库的使用例子BDE
    CSS- 兼容样式记录
    Delphi- DLL操作
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7231722.html
Copyright © 2011-2022 走看看