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);
            
        }
    }
  • 相关阅读:
    集合中的3个经典练习题
    创建泛类集合List以及数组转集合,集合转数组的应用
    添加一个txt文件(例如在桌面),利用后台对文件写入内容
    File类的创建,删除文件
    集合中存放随机数的问题之解析
    集合中的类型转化 以及求集合中元素的最大值,平均值
    response.sendRedirect()使用注意事项
    request.getContextPath是为了解决相对路径的问题,可返回站点的根路径
    java中instanceof的用法
    getParameter 与 getAttribute的区别
  • 原文地址:https://www.cnblogs.com/linkarl/p/4871340.html
Copyright © 2011-2022 走看看