Java设计模式之访问者模式
来源:互联网 发布:安卓市场源码 编辑:程序博客网 时间:2024/05/16 10:27
访问者模式(visitor)
概念:
分离对象的数据和行为,可以实现不修改已有类的情况下,增加新的操作[访问者]。
适用:
1一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
2 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor使得你可以将相关的操作集中起来定义在一个类中。
3 当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。
4 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常 改变,那么可能还是在这些类中定义这些操作较好。
代码示例:
Visitor.java
/** * 具体访问者 * 实现每个由Visitor声明的操作,每个操作实现算法的一部分,而该算法片段是应对于结构中对象的类 */public class VisitorA implements Visitor { public void visit(Park park) {} public void visit(ParkB parkB) {} public void visit(ParkA parkA) { System.out.println("清洁工A完成公园A部分的卫生"); }}
/** * 具体访问者 * 实现每个由Visitor声明的操作,每个操作实现算法的一部分,而该算法片段是应对于结构中对象的类 */public class VisitorB implements Visitor { public void visit(Park park) {} public void visit(ParkA parkA) {} public void visit(ParkB parkB) { System.out.println("清洁工B完成公园B部分的卫生"); }}
/** * 具体访问者 * 实现每个由Visitor声明的操作,每个操作实现算法的一部分,而该算法片段是应对于结构中对象的类 */public class VisitorManager implements Visitor { public void visit(Park park) { System.out.println("管理员负责公园卫生检查"); } public void visit(ParkA parkA) { System.out.println("管理员负责公园A部分卫生检查"); } public void visit(ParkB parkB) { System.out.println("管理员负责公园B部分卫生检查"); }}
/** * 公园每一部分的抽象 * 定义一个accept操作,接收访问者 */public interface ParkElement { public void accept(Visitor visitor);}
public class Park implements ParkElement { private ParkA parkA; private ParkB parkB; public Park(){ this.parkA = new ParkA(); this.parkB = new ParkB(); } public void accept(Visitor visitor) { visitor.visit(this); parkA.accept(visitor); parkB.accept(visitor); }}
/** * 公园的A部分 */public class ParkA implements ParkElement { public void accept(Visitor visitor) { visitor.visit(this); }}
/** * 公园的B部分 */public class ParkB implements ParkElement { public void accept(Visitor visitor) { visitor.visit(this); }}
/** * 访问者模式的测试 * 访问者模式分离对象的数据和行为,可以实现不修改已有类的情况下,增加新的操作 */public class Test { public static void main(String[] args) { Park park = new Park(); VisitorA visitorA = new VisitorA(); park.accept(visitorA); VisitorB visitorB = new VisitorB(); park.accept(visitorB); VisitorManager visitorManager = new VisitorManager(); park.accept(visitorManager); }}
阅读全文
0 0
- java设计模式之访问者模式 Visitor
- java设计模式之访问者模式
- JAVA设计模式之访问者模式
- Java设计模式之访问者模式
- Java设计模式之访问者模式
- Java设计模式之访问者模式
- 《Java设计模式》之访问者模式
- JAVA设计模式之访问者模式
- Java设计模式之访问者模式
- JAVA设计模式之:访问者模式
- java设计模式之访问者模式一
- java设计模式之访问者模式二
- Java设计模式之访问者模式
- java设计模式之访问者模式
- Java设计模式之访问者模式
- Java设计模式之访问者模式
- JAVA设计模式之访问者模式
- Java设计模式之访问者模式
- 构造函数、析构函数、拷贝构造函数、赋值函数
- 【知了堂学习笔记】c3p0连接池
- 【网页】在网页中添加隐藏播放器自动播放背景音乐的办法
- restorecon命令详解
- 删除列表中某个值-函数2
- Java设计模式之访问者模式
- 图像语义分割:从头开始训练deeplab v2系列之三【pascal-context数据集】
- Java Filter过滤器初使用
- JAVA电话簿2
- laravel artisan 个人总结(三)
- U盘的基础知识介绍&量产
- js中函数参数arguments、callee、caller,值传递、重载
- Python3 Anaconda3下import cv2错误解决方案
- 学习 RTOS -- 认识 RTOS 和最简单的 OS(一)