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

文章目录

类结构

数据相关

数据的抽象类/接口

定义两个抽象方法:

一个用于数据处理

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

数据的具体实现类

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

访问者相关

访问者的抽象类/接口

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

访问者的具体实现类

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

数据与访问者的关系

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

代码实例

数据相关代码

复制代码
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);
    }
}

总结

相关推荐
老蒋每日coding7 小时前
AI Agent 设计模式系列(十九)—— 评估和监控模式
人工智能·设计模式
会员果汁8 小时前
23.设计模式-解释器模式
设计模式·解释器模式
「QT(C++)开发工程师」15 小时前
C++设计模式
开发语言·c++·设计模式
茶本无香16 小时前
设计模式之七—装饰模式(Decorator Pattern)
java·设计模式·装饰器模式
漂洋过海的鱼儿1 天前
设计模式——EIT构型(三)
java·网络·设计模式
老蒋每日coding1 天前
AI Agent 设计模式系列(十八)—— 安全模式
人工智能·安全·设计模式
老蒋每日coding2 天前
AI Agent 设计模式系列(十六)—— 资源感知优化设计模式
人工智能·设计模式·langchain
老蒋每日coding2 天前
AI Agent 设计模式系列(十七)—— 推理设计模式
人工智能·设计模式
冷崖2 天前
桥模式-结构型
c++·设计模式
连山齐名2 天前
设计模式之一——堵塞队列
设计模式