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());
       }
    }
  • 相关阅读:
    FastDFS搭建
    关于nginx性能优化CPU参数worker_cpu_affinity使用说明
    LNMP一键安装升级nginx及php常用设置 SFTP管理指南
    Nginx的防盗链
    Nginx+PHP 配置漏洞:静态文件都可以当作 PHP 解析
    Nginx技巧:灵活的server_name
    数据库分表时OR Mapping方法
    nginx配置多域名反向代理
    nginx server 实时监控
    转:SQL Server 2005数据库分表实例
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11699181.html
Copyright © 2011-2022 走看看