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

类结构

数据相关类

数据的抽象类/接口

定义两个抽象方法:

一个用于数据处理

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

数据的具体实现类

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

访问者相关类

访问者的抽象类/接口

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

访问者的具体实现类

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

类之间的关系

数据与访问者是相互依赖,多对多的关系,一个数据多个访问者访问,一个访问者访问多个数据

抽象出数据接口和访问者接口,类似MVP针对MVC的升级,使用接口适应M与V的多对多关系

代码实例

数据相关类

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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值