博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式22——Visitor设计模式
阅读量:5815 次
发布时间:2019-06-18

本文共 2173 字,大约阅读时间需要 7 分钟。

hot3.png

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

你可能感兴趣的文章
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>
30分钟Git命令“从入门到放弃”
查看>>
nginx : TCP代理和负载均衡的stream模块
查看>>
MYSQL数据库间同步数据
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
让前端小姐姐愉快地开发表单
查看>>
Dubbo笔记(四)
查看>>
Web前端JQuery入门实战案例
查看>>
java B2B2C Springboot电子商城系统- SSO单点登录之OAuth2.0 登出流程(3)
查看>>
USB 通信原理
查看>>
7zZip zip RAR iOS
查看>>
date命令的详细用法!
查看>>
UiAutomator源码分析之UiAutomatorBridge框架
查看>>
python 开发之selenium
查看>>
Xcode3.2.5中找不到Mac OS X - Command Line Utility -...
查看>>
css的div垂直居中的方法,百分比div垂直居中
查看>>
如何理解EM算法
查看>>
nginx 域名跳转一例~~~(rewrite、proxy)
查看>>
linux用户家目录无损迁移到独立硬盘
查看>>