Java访问者模式以及在访问者模式中使用反射
来源:互联网 发布:淘宝红线绿线流量图 编辑:程序博客网 时间:2024/05/22 14:03
设计模式复习,代码是最好的说明。
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作,属于行为类模式。
UML:
代码:
abstract class Element{ public abstract void accept(IVisitor visitor); public abstract void doSomething();}interface IVisitor{ public void visit(ConcreteElement1 concreteElement1); public void visit(ConcreteElement2 concreteElement2);}class ConcreteElement1 extends Element{ public void accept(IVisitor visitor) { visitor.visit(this); } public void doSomething() { System.out.println("Element1"); }}class ConcreteElement2 extends Element{ public void accept(IVisitor visitor) { visitor.visit(this); } public void doSomething() { System.out.println("Element2"); }}class Visitor implements IVisitor{ public void visit(ConcreteElement1 concreteElement1) { concreteElement1.doSomething(); } public void visit(ConcreteElement2 concreteElement2) { concreteElement2.doSomething(); }}class ObjectStruture{ public static List<Element> getList(){ List<Element> list = new ArrayList<Element>(); for (int i = 0; i <10 ; i++) { if (new Random().nextInt(100)>50) list.add(new ConcreteElement1()); else list.add(new ConcreteElement2()); } return list; }}public class Client { public static void main(String[] args) { List <Element>list = ObjectStruture.getList(); IVisitor visitor = new Visitor(); for (Element element :list) { element.accept(visitor); } }}
从定义和代码其实不难理解,访问者模式是就是为了解决“如何操作集合类型中不同类型的对象”这一问题。它比使用ifelse更为灵活、扩展性更好,但是也引入了循环依赖、代码增多、难以理解等问题。不过瑕不掩瑜,利用反射可以使访问者模式更加灵活高效,详见https://www.javaworld.com/article/2077602/learn-java/java-tip-98--reflect-on-the-visitor-design-pattern.html
参考链接:
http://www.importnew.com/12536.html
http://blog.csdn.net/zhengzhb/article/details/7489639
如有错误,欢迎指出!
阅读全文
0 0
- Java访问者模式以及在访问者模式中使用反射
- 在访问者模式中使用反射
- 在访问者模式中使用反射
- 访问者模式使用反射
- Java访问者模式
- java访问者模式
- Java 访问者模式(Visitor)
- java 访问者模式
- java访问者模式
- java访问者模式
- java访问者模式
- java访问者模式
- Java访问者模式
- Java访问者模式
- java设计模式 访问者模式
- java设计模式-访问者模式
- JAVA设计模式---访问者模式
- java设计模式---访问者模式
- linux基本知识
- 洛谷P2422 良好的感觉(简单数据结构复习)
- Java集合学习总结
- 软考嵌入式系统设计师2013年上午试题总结
- spring security的权限页面标签可以根据 ifAnyGranted="ROLE_SYSTEM" 这个不同的权限觉得在<sec:authorize的作用不作用,就相当于c:if标签的作用
- Java访问者模式以及在访问者模式中使用反射
- 文章标题 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- A Deep Convolutional Neural Network for segmenting and classifying epithelial and stromal regions
- Qt去掉窗口标题栏实现移动缩放
- 急什么,我们又不赶时间
- 【LeetCode】C# 62、Unique Paths
- 金融科技&大数据产品推荐:天眼查——人人都能用的商业调查工具
- 阿里云天池医疗AI大赛第一季迎来最后决赛,医疗AI面临哪些机遇与阻碍
- 【案例】融360:智能金融系统建设最佳实践案例