zoukankan      html  css  js  c++  java
  • 大话设计模式笔记 访客模式

    访问者模式(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);
            
        }
    }
  • 相关阅读:
    第8章 降维
    第7章 集成学习和随机森林
    JS利用async、await处理少见的登录业务逻辑
    SQL SERVER 实现多行转多列
    Mysql函数----控制流函数介绍
    继承----静态代码快、构造方法、代码块、普通方法的执行顺序
    RBAC----基于角色的访问权限控制
    秋招-----思特沃克视频面试总结
    tomcat启动失败的三种方法
    索引之----mysql联合索引
  • 原文地址:https://www.cnblogs.com/linkarl/p/4871340.html
Copyright © 2011-2022 走看看