设计模式22——Visitor设计模式

本文详细介绍了Visitor访问者设计模式,包括其基本概念、角色定义及结构,并提供了具体的代码示例。此外,还列举了JDK中访问者模式的实际应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Visitor访问者设计模式是在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升。

 Visitor访问者设计模式的角色:
(1) 访问者角色(Visitor):声明一个访问接口。接口的名称和方法的参数标识了向访问者发送请求的元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
(2) 具体访问者角色(Concrete Visitor):实现访问者角色(Visitor)接口

(3)元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
(4) 具体元素角色(Concrete Element):实现元素角色(Element)接口。
(5) 对象结构角色(Object Structure):具体元素的集合,提供一个高层的接口允许访问者角色访问它的元素。

Visitor访问者设计模式结构如下:

Visitor访问者设计模式例子代码如下:

//抽象元素
interface IElement{
    public void accept(IVisitor visitor);
}


//具体元素
class ElementA implements IElement{
    public void accept(IVisitor visitor){
        visitor.visit(this);
    }

    public void operationA(){
        System.out.println(“ElementA do operationA()……”);
    }
}


class ElementB implements IElement{
    public void accept(IVisitor visitor){
        visitor.visit(this);
    }

    public void operationB(){
        System.out.println(“ElementB do operationB()……”);
    }
}


class ElementC implements IElement{
    public void accept(IVisitor visitor){
        visitor.visit(this);
    }

    public void operationC(){
        System.out.println(“ElementC do operationC()……”);
    }
}


//抽象访问者
interface IVisitor{
    public void visit(ElementA element);
    public void visit(ElementB element);
    public void visit(ElementC element);
}


//具体访问者
class MyVisitor implements IVisitor{
    public void visit(ElementA element){
        element.operationA();
    }

    public void visit(ElementB element){
        element.operationB();
    }

    public void visit(ElementC element){
        element.operationC();
    }
} 


Public class VisitorDemo{
    public static void main(String[] args){
        IElement[] list = {new ElementA(), new ElementB(), new ElementC()};
        IVisitor visitor = new MyVisitor();
        for(int i = 0; i < list.length; i++){
            list[i].accept(visitor);
        }	
    }
}


Visitor访问者设计模式有以下两个特点:

(1).对元素的访问不是访问者主动发起的,而是通过元素接收访问者来访问自己。

(2).对元素的操作不是元素自己主动调用,而是通过访问者的访问方法来操作元素。

JDK中访问者模式的应用:

javax.lang.model.element.Element和javax.lang.model.element.ElementVisitor
javax.lang.model.type.TypeMirror和javax.lang.model.type.TypeVisitor
javax.lang.model.element.AnnotationValue和javax.lang.model.element.AnnotationValueVisitor

转载于:https://my.oschina.net/hongdengyan/blog/196385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值