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());
        }
    
    }
  • 相关阅读:
    PPT 转 word
    securefx 系统中不到指定文件 (转中文)
    U盘使用技巧篇 制作一般人删除不了的文件(宣传视频) (量产开卡)
    电脑加载有文件的CD、DVD驱动器图标修改
    CentOS 7 网卡注释
    linux IP 注释
    VMware虚拟机安装黑群晖DSM6.2 (转)
    DAS、SAN和NAS三种服务器存储方式 (转)
    wdCP V3.2
    JS异步编程 XHR的用法
  • 原文地址:https://www.cnblogs.com/zzlcome/p/11428753.html
Copyright © 2011-2022 走看看