zoukankan      html  css  js  c++  java
  • 访问者模式15(19)

    将数据结构和数据访问分离。

    数据结构就是Compute类。

    双分派,客户端传入参数(第一次分派),接受访问者将自己作为参数传给访问者(第二次分派)。

    双分派也就是两次状态的改变,简单理解,ComputerVisitor(接收访问者)在客户端接收参数,并将自己传给服务端的访问者访问。

    package behavioral.visit;
    
    public interface ComputerPart {
    
        public void accept(ComputerVisitor v);
    }
    
    package behavioral.visit;
    
    public class Mouse implements ComputerPart {
    
        @Override
        public void accept(ComputerVisitor v) {
            v.visit(this);
        }
    
    }
    
    package behavioral.visit;
    
    public class Keyboard implements ComputerPart {
    
        @Override
        public void accept(ComputerVisitor v) {
            v.visit(this);
        }
    
    }
    
    package behavioral.visit;
    
    public class Monitor implements ComputerPart {
    
        @Override
        public void accept(ComputerVisitor v) {
            v.visit(this);
        }
    
    }
    
    package behavioral.visit;
    
    public class Computer implements ComputerPart{
    
        ComputerPart[] parts;
         
           public Computer(){
              parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};      
           } 
         
         
           @Override
           public void accept(ComputerVisitor v) {
              for (int i = 0; i < parts.length; i++) {
                 parts[i].accept(v);
              }
              v.visit(this);
           }
    }
    package behavioral.visit;
    
    public interface Visitor {
    
        public void visit(Computer c);
        public void visit(Mouse mou);
        public void visit(Keyboard k);
        public void visit(Monitor mon);
    
    }
    
    
    package behavioral.visit;
    
    public class ComputerVisitor implements Visitor {
    
        @Override
        public void visit(Computer c) {
            System.out.println("The computer is on");
        }
    
        @Override
        public void visit(Mouse mou) {
            System.out.println("click mouuse");
        }
    
        @Override
        public void visit(Keyboard k) {
            System.out.println("click Keyboard");
        }
    
        @Override
        public void visit(Monitor mon) {
            System.out.println("The monitor has a picture");
        }
    
    }
    
    package behavioral.visit;
    
    public class VisitMan {
    
        public static void main(String[] args) {
            ComputerPart computer = new Computer();
            computer.accept(new ComputerVisitor());
        }
    
    }
  • 相关阅读:
    javascript插入样式
    Backbone.js使用jsonp api示例
    RequireJS optimizer Ant task
    Javascript 中的 call 和 apply
    通过shtml实现重构页面模块化构建的相关设置
    Eclipse 支持JQuery提示 jQueryWTP插件的安装方法
    iframe加载完成监控兼容IE/FF/Chrome
    让浏览器跨域
    Javascript 类的实现
    宏定义和内联函数区别
  • 原文地址:https://www.cnblogs.com/zzlcome/p/11428753.html
Copyright © 2011-2022 走看看