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);
            
        }
    }
  • 相关阅读:
    Hive之安装
    python3常用内置方法(持续更新中。。。)
    CentOS7下安装Python3及Pip3并保留Python2
    一个爬取52破解的全部帖子地址的简单爬虫
    在windows写入文件中遇到 UnicodeEncodeError: ‘gbk’ codec can’t encode character 错误的解决办法
    我的vim配置
    树莓派命令行模式调整音量
    树莓派更改软件源
    linux连接wifi
    给树莓派挂载移动硬盘或U盘
  • 原文地址:https://www.cnblogs.com/linkarl/p/4871340.html
Copyright © 2011-2022 走看看