• 大话设计模式笔记 访客模式


    访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

    把处理从数据结构分离出来。

    有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的。

    缺点:使得增加新的数据结构变得困难。

    package visitor;
    
    public abstract class Element {
    
        public abstract void accept(Visitor visitor);
        
    }
    package visitor;
    
    public abstract class Visitor {
    
        public abstract void visitConcreteElementA(ConcreteElementA concreteElementA);
        
        public abstract void visitConcreteElementB(ConcreteElementB concreteElementB);
    }
    package visitor;
    
    public class ConcreteElementA extends Element {
    
        @Override
        public void accept(Visitor visitor) {
            visitor.visitConcreteElementA(this);
        }
    
    }
    package visitor;
    
    public class ConcreteElementB extends Element {
    
        @Override
        public void accept(Visitor visitor) {
            visitor.visitConcreteElementB(this);
        }
    
    }
    package visitor;
    
    public class ConcreteVistor1 extends Visitor {
    
        @Override
        public void visitConcreteElementA(ConcreteElementA concreteElementA) {
            System.out.println("ConcreteVistor1 visitConcreteElementA");
        }
    
        @Override
        public void visitConcreteElementB(ConcreteElementB concreteElementB) {
            System.out.println("ConcreteVistor1 visitConcreteElementB");
        }
    
    }
    package visitor;
    
    public class ConcreteVistor2 extends Visitor {
    
        @Override
        public void visitConcreteElementA(ConcreteElementA concreteElementA) {
            System.out.println("ConcreteVistor2 visitConcreteElementA");
        }
    
        @Override
        public void visitConcreteElementB(ConcreteElementB concreteElementB) {
            System.out.println("ConcreteVistor2 visitConcreteElementB");
        }
    
    }
    package visitor;
    
    import java.util.ArrayList;
    
    public class ObjectStructure {
        private ArrayList<Element> elements=new  ArrayList<Element>();
        
        public void add(Element element){
            elements.add(element);
        }
        
        public void remove(Element element){
            elements.remove(element);
        }
        
        public void accept(Visitor visitor) {
            for (Element element : elements) {
                element.accept(visitor);
            }
        }
        
        public static void main(String[] args) {
            ObjectStructure objectStructure=new ObjectStructure();
            objectStructure.add(new ConcreteElementA());
            objectStructure.add(new ConcreteElementB());
            
            ConcreteVistor1 concreteVistor1=new ConcreteVistor1();
            ConcreteVistor2 concreteVistor2=new ConcreteVistor2();
            
            objectStructure.accept(concreteVistor1);
            objectStructure.accept(concreteVistor2);
            
        }
    }
  • 相关阅读:
    TP5.1的Request以及构造方法注入以及助手函数的使用
    TP5的类似TP3使用‘DEFAULT_THEME’的配置修改主题风格的方法,以及常见模板错误
    MySQL中进行树状所有子节点的查询
    nginx upstream 一致性哈希模块
    Nginx的基本入门
    php模式设计之 观察者模式
    php模式设计之 适配器模式
    笔记整理
    经验小结(个人笔记)
    防止页面跳转,可防ajax之后忽然跳转(主要用于采集)
  • 原文地址:https://www.cnblogs.com/linkarl/p/4871340.html
Copyright © 2020-2023  润新知