代码的设计模式:访问者模式

文章目录

类结构

数据相关

数据的抽象类/接口

定义两个抽象方法:

一个用于数据处理

一个用于与访问者建立依赖关系,方法传入访问者

数据的具体实现类

实现抽象类或接口,实现两个抽象方法,完成具体的数据处理和将自身传递给访问者

访问者相关

访问者的抽象类/接口

定义多个重载的抽象方法,方法用于访问不同的数据,方法传入数据类型

访问者的具体实现类

实现抽象类或接口,实现多个重载的抽象方法,完成具体的数据访问

数据与访问者的关系

并没有建立紧密的耦合关系,而是通过定义方法的参数为对方类型,建立松耦合关系

代码实例

数据相关代码

复制代码
interface Data {
    void accept(Vistor visitor);
    String handle();
}

class Data1 implements Data {

    void accept(Visitor visitor) {
        vistor.visit(this);
    }

    String handle() {
        return "data1"
    }
}

class Data2 implements Data {

    void accept(Visitor visitor) {
        vistor.visit(this);
    }

    String handle() {
        return "data1"
    }
}

访问者相关代码

复制代码
interface Visitor {

    void visit(Data1 data);
    void visit(Data2 data);
  
}


class Visitor1 implements Visitor {

    void visit(Data1 data) {
        String result = data.handle();
        //对result处理
        System.out.println(result)
    }

    void visit(Data2 data) {
        String result = data.handle();
        //对result处理
        System.out.println(result)

    }
}

数据访问代码

复制代码
void main() {
    

    List<Data> dataList = new ArrayList<Data>();
    dataList.add(new Data1());
    dataList.add(new Data2());
    //
    Visitor visitor1 = new Visitor1();
    Visitor visitor2 = new Visitor2();
    for(Data data: dataList) {

        data.visit(vistor1);
        data.visit(visitor2);
    }
}

总结

相关推荐
小白要加油努力10 小时前
C++设计模式--策略模式与观察者模式
开发语言·c++·设计模式
OEC小胖胖15 小时前
【React 设计模式】受控与非受控:解构 React 组件设计的核心模式
前端·react.js·设计模式·前端框架·web
pengzhuofan16 小时前
Java设计模式-外观模式
java·设计模式·外观模式
long31619 小时前
适配器模式 java demo
java·javascript·后端·程序人生·设计模式·适配器模式
##学无止境##19 小时前
从青铜到王者:Java设计模式——代理模式
java·设计模式·代理模式
pengzhuofan19 小时前
Java设计模式-适配器模式
java·设计模式·适配器模式
Meteors.19 小时前
23种设计模式——适配器模式(Adapter)详解
java·设计模式·适配器模式
牛奶咖啡131 天前
学习设计模式《二十三》——桥接模式
学习·设计模式·桥接模式·认识桥接模式·桥接模式的优点·何时选用桥接模式·桥接模式的使用示例
左灯右行的爱情1 天前
深度学习设计模式:责任链(Chain of Responsibility)模式(例子+业务场景+八股)
深度学习·设计模式·责任链模式
是2的10次方啊1 天前
🚀 Spring设计模式大揭秘:23种模式藏在你每天在用的框架里
设计模式