美文网首页爱编程,爱生活
Java设计模式<访问者模式>

Java设计模式<访问者模式>

作者: 熬夜的猫头鹰 | 来源:发表于2018-06-16 15:14 被阅读7次

    Java设计模式<访问者模式>

    意图

    • 将对象的结构和操作分离

    角色

    • 抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的
    • 访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情
    • 抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问
    • 元素类:实现抽象元素类所声明的accept方法,通常都是visitor.visit(this),基本上已经形成一种定式了

    场景

    家是一个抽象的概念,家中一台电视机,可以打开和关闭,我们可以设想这样一个场景,Tom 家可以接受Kite来访问,Kite来了之后可以打开电视,然后Kite打开电视之后可以坐在沙发上或者是吃点零食。

    定义一个抽象的家

    public interface Home {
    
        public void openTV();
    
        public void accept(Visitor visitor);
    
    }
    
    

    Tom的家

    public class TomHome implements Home {
        @Override
        public void openTV() {
            System.err.println("打开电视机");
        }
    
        @Override
        public void accept(Visitor visitor) {
            visitor.visit(this);
        }
    }
    
    
    

    定义访问者

    public interface Visitor {
    
        public void visit(Home home);
    }
    
    

    定义Kite

    
    public class KiteVisitor implements Visitor{
        @Override
        public void visit(Home home) {
            home.openTV();
            System.err.println("我得吃个苹果了 ");
        }
    }
    
    

    测试类

    
    public class DemoMain {
    
        public static void main(String[] args) {
            Home tomHome = new TomHome();
            tomHome.accept(new KiteVisitor());
        }
    }
    
    

    输出

    打开电视机
    我得吃个苹果了 
    
    

    相关文章

      网友评论

        本文标题:Java设计模式<访问者模式>

        本文链接:https://www.haomeiwen.com/subject/indbeftx.html