JAVA设计模式(行为型)------ 访问者模式

本文介绍了一种设计模式——访问者模式的实际应用。通过将数据结构与数据操作分离,访问者模式允许在不修改数据结构的情况下增加新的操作。文章展示了如何在Java中实现访问者模式,包括定义访问者接口、实现不同类型的元素及其接受访问者的方法。
摘要由CSDN通过智能技术生成

主要将数据结构与数据操作分离。
被访问者中调用访问者访问方法,即告知访问者内部具体细节

public class Visitor_Main {
    public static void main(String[] args) {
        Element element1 = Demo1_Element.builder().age("age...10").name("name...Demo1_Element").build();
        Element element2 = Demo2_Element.builder().weigh("weigh...10").heigh("heigh...Demo2_Element").build();
        ElementList elementList = new ElementList();
        elementList.add(element1);
        elementList.add(element2);
        elementList.accept(new Demo_Visit());
    }
}

abstract class Visit {
    abstract void visit(Demo1_Element element);
    abstract void visit(Demo2_Element element);
}

class Demo_Visit extends Visit{
    @Override
    void visit(Demo1_Element element) {
        System.out.println(element.getAge()+"__"+element.getName());
    }
    @Override
    void visit(Demo2_Element element) {
        System.out.println(element.getHeigh()+"__"+element.getWeigh());
    }
}
interface Element{
    //接待访问者
    void accept(Visit visit);
}
//对象结构用于存放元素对象,提供内部元素的便利访问方法
class ElementList{
    private List<Element> elements = new ArrayList<>();
    public boolean add(Element element){
        if (element != null)
            return elements.add(element);
        return Boolean.FALSE;
    }
    public void accept(Visit visit){
        if (CollectionUtils.isEmpty(elements))
            return;
        elements.forEach(e->e.accept(visit));
    }
}
@Data
@Builder
class Demo1_Element implements Element{
    private String name;
    private String age;
    //告知访问者内部细节,接受访问者的访问
    @Override
    public void accept(Visit visit) {
        visit.visit(this);
    }
}
@Data
@Builder
class Demo2_Element implements Element{
    private String heigh;
    private String weigh;
    @Override
    public void accept(Visit visit) {
        visit.visit(this);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值