zoukankan      html  css  js  c++  java
  • 设计模式(第二十一式:访问者模式)

    概念:
      访问者模式:Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the class of the elements on which it operations. 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

    实现:
      定义数据结构

        public class Computer {
            public Computer(CPU cpu,HardDisk hardDisk){
                this.cpu = cpu;
                this.hardDisk = hardDisk;
            }
    
            public void accept(ComputerVisitor visitor){
                cpu.accept(visitor);
                hardDisk.accept(visitor);
    
            }
    
            private CPU cpu;
            private HardDisk hardDisk;
    
            public CPU getCpu() {
                return cpu;
            }
    
            public void setCpu(CPU cpu) {
                this.cpu = cpu;
            }
    
            public HardDisk getHardDisk() {
                return hardDisk;
            }
    
            public void setHardDisk(HardDisk hardDisk) {
                this.hardDisk = hardDisk;
            }
        }


      抽象访问对象

        public abstract class Hardware {
            private String name;
    
            public Hardware(String name){
                this.name = name;
            }
    
            public void run(){
                System.out.println(this.name+"运行了");
            }
    
            public abstract void accept(ComputerVisitor visitor);
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
        }


      访问对象的具体实现

        public class CPU extends Hardware {
    
            public CPU(String name) {
                super(name);
            }
    
            @Override
            public void accept(ComputerVisitor visitor) {
                visitor.visitor(this);
            }
        }
        public class HardDisk extends Hardware {
    
            public HardDisk(String name){
                super(name);
            }
    
            @Override
            public void accept(ComputerVisitor visitor) {
                visitor.visitor(this);
            }
        }


      定义访问者接口

        public interface ComputerVisitor {
    
            void visitor(Hardware hardware);
        }


      访问者具体实现

        public class NameVisitor implements ComputerVisitor {
            @Override
            public void visitor(Hardware hardware) {
                System.out.println("访问者访问Name:" + hardware.getName());
            }
        }
        public class RunVisitor implements ComputerVisitor {
            @Override
            public void visitor(Hardware hardware) {
                hardware.run();
            }
        }


    分析:
      1.访问者模式可以将一组相关的访问封装在一起,对于新的属性或者行为可以比较容易的扩展访问者。
      2.访问者提供的访问方式不通过原数据结构,所以新增加原数据结构对象,导致新增加访问者对象较为复杂。
      3.适用场景:
        a.有一组固定的运行流程可以使用访问者对其封装。
        b.业务规则需要比便利多个不同对象的某些方法,也是可以用访问者模式封装。

  • 相关阅读:
    SonarQube+Jenkins代码审查集成CI/CD
    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决
    ORA-31687: error creating worker process with worker id 1
    Oracle修改表列长度
    RouYi(Export excel)
    Spring事务失效的原因
    Linux/Keychron键盘 功能键F1-F12映射修复
    git 推送本地文件到远程仓库
    git remote 删除已添加的远程仓库地址
    mssql新建数据库
  • 原文地址:https://www.cnblogs.com/ben-mario/p/11134086.html
Copyright © 2011-2022 走看看