访问者模式(java版)
来源:互联网 发布:淘宝店铺怎么才能靠前 编辑:程序博客网 时间:2024/06/03 13:40
1.引入
访问者模式就是将对象的数据结构(对象数据的存储)与对象的行为(对象的方法)相分离,避免了数据结构与操作的耦合。而访问者作为数据结构的操作者,如果想要增加数据结构的操作,那么只需要增加访问者就行了。所以前提是数据结构不变而操作可变,增加操作很容易,更改数据结构很困难。
2.举例
在生活中,我们在网上有公共的数据、也有个人的数据,而它们数据的存储结构是无变化的,变化的只是不同的访问者,去查看数据而已。
3.形式
抽象访问者:Visitor.class
具体访问者:ConcreteVisitorA.class和ConcreteVisitorB.class
抽象数据:Data.class
具体数据:PersonData.class和CommonData.class
数据结构:DataStructure.class
4.实现
--4.1抽象访问者:
public interface Visitor {public void query(Data data);}
--4.2具体访问者:
public class ConcreteVisitorA implements Visitor{//具体访问者A@Overridepublic void query(Data data) {// TODO Auto-generated method stubSystem.out.println("具体访问者A,访问:"+data.getClass().getName()+"数据");}}public class ConcreteVisitorB implements Visitor{ //具体访问者B @Override public void query(Data data) { // TODO Auto-generated method stub System.out.println("具体访问者B,访问:"+data.getClass().getName()+"数据"); }}
--4.3抽象数据:
public interface Data {public void accept(Visitor visitor);}
--4.4具体数据:
public class CommonData implements Data{//公共数据@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.query(this);}}public class PersonData implements Data{ //个人数据 @Override public void accept(Visitor visitor) { // TODO Auto-generated method stub visitor.query(this); }}
--4.5数据结构类:
public class DataStructure {private List<Data> list=new ArrayList<Data>();public void addInformation(Data info){list.add(info);}public void removeInformation(Data info){list.remove(info);}public void accept(Visitor visitor){for(Data info:list){info.accept(visitor);}}}
测试类:
public class Test {public static void main(String[] args) {DataStructure is=new DataStructure();PersonData personData=new PersonData();CommonData commonData=new CommonData();Visitor concreteVisitorA=new ConcreteVisitorA();Visitor concreteVisitorB=new ConcreteVisitorB();is.addInformation(personData);is.addInformation(commonData);is.accept(concreteVisitorA);is.accept(concreteVisitorB);System.out.println("------------删除了个人数据-------------");is.removeInformation(personData);is.accept(concreteVisitorA);is.accept(concreteVisitorB);}}
结果:
具体访问者A,访问:cn.spy.design.PersonData数据
具体访问者A,访问:cn.spy.design.CommonData数据
具体访问者B,访问:cn.spy.design.PersonData数据
具体访问者B,访问:cn.spy.design.CommonData数据
------------删除了个人数据-------------
具体访问者A,访问:cn.spy.design.CommonData数据
具体访问者B,访问:cn.spy.design.CommonData数据
-----------------------------------------------------------------------------------------------------
总结:
访问者模式就是将数据结构与结构上的操作解耦,在不改变元素类的情况下,自由增加这些元素的新操作。适用于数据结构稳定,算法随意变化的环境。
- 访问者模式(java版)
- Java访问者模式(Visitor)
- 访问者模式(Visitor)Java
- java设计模式-访问者模式(Visitor)
- 设计模式(JAVA)------访问者模式
- Java设计模式(访问者模式)
- 访问者模式(Visitor)-----基于JAVA语言
- Java访问者模式
- java访问者模式
- Java 访问者模式(Visitor)
- java 访问者模式
- java访问者模式
- java访问者模式
- java访问者模式
- java访问者模式
- Java访问者模式
- Java访问者模式
- 设计模式学习笔记--解释器模式Interpreter与访问者模式Visitor(Java版)
- Android6.0以上权限申请
- 深入理解C语言的函数调用过程
- Android中如何做到Service被关闭后又自动启动
- 关于IO
- mysql 5.7免安装版配置教程
- 访问者模式(java版)
- fragment点击事件穿透问题
- django一对多查询错误处理
- 呵呵sql
- scala getOrElse的坑
- pb12 开发 webservice 注意事项
- 换行总结
- android root
- dubbo系列文章做备份——Dubbo之旅--架构路线