zoukankan      html  css  js  c++  java
  • 设计模式-访问者模式

    1.什么是访问者模式

      在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作

    2.应用场景

      您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式

    3.实际应用

      

    步骤 1
    定义一个表示元素的接口。
    
    ComputerPart.java
    public interface ComputerPart {
       public void accept(ComputerPartVisitor computerPartVisitor);
    }
    步骤 2
    创建扩展了上述类的实体类。
    
    Keyboard.java
    public class Keyboard  implements ComputerPart {
     
       @Override
       public void accept(ComputerPartVisitor computerPartVisitor) {
          computerPartVisitor.visit(this);
       }
    }
    Monitor.java
    public class Monitor  implements ComputerPart {
     
       @Override
       public void accept(ComputerPartVisitor computerPartVisitor) {
          computerPartVisitor.visit(this);
       }
    }
    Mouse.java
    public class Mouse  implements ComputerPart {
     
       @Override
       public void accept(ComputerPartVisitor computerPartVisitor) {
          computerPartVisitor.visit(this);
       }
    }
    Computer.java
    public class Computer implements ComputerPart {
       
       ComputerPart[] parts;
     
       public Computer(){
          parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};      
       } 
     
     
       @Override
       public void accept(ComputerPartVisitor computerPartVisitor) {
          for (int i = 0; i < parts.length; i++) {
             parts[i].accept(computerPartVisitor);
          }
          computerPartVisitor.visit(this);
       }
    }
    步骤 3
    定义一个表示访问者的接口。
    
    ComputerPartVisitor.java
    public interface ComputerPartVisitor {
       public void visit(Computer computer);
       public void visit(Mouse mouse);
       public void visit(Keyboard keyboard);
       public void visit(Monitor monitor);
    }
    步骤 4
    创建实现了上述类的实体访问者。
    
    ComputerPartDisplayVisitor.java
    public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
     
       @Override
       public void visit(Computer computer) {
          System.out.println("Displaying Computer.");
       }
     
       @Override
       public void visit(Mouse mouse) {
          System.out.println("Displaying Mouse.");
       }
     
       @Override
       public void visit(Keyboard keyboard) {
          System.out.println("Displaying Keyboard.");
       }
     
       @Override
       public void visit(Monitor monitor) {
          System.out.println("Displaying Monitor.");
       }
    }
    步骤 5
    使用 ComputerPartDisplayVisitor 来显示 Computer 的组成部分。
    
    VisitorPatternDemo.java
    public class VisitorPatternDemo {
       public static void main(String[] args) {
     
          ComputerPart computer = new Computer();
          computer.accept(new ComputerPartDisplayVisitor());
       }
    }
  • 相关阅读:
    iPhone开发之多线程使用
    iPhone开发之启动画面及动画
    Keyboard 遮挡 UITextField
    iPhone发布之图标大小和设置
    Linux文件目录及其作用
    UIView设置背景图片
    通过点击事件轮换隐藏和显示导航栏
    内存检测
    iPhone开发之自定义柱状图
    给UIImageView添加点击事件
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11699181.html
Copyright © 2011-2022 走看看