设计模式之---访问者模式
来源:互联网 发布:21端口是tcp 编辑:程序博客网 时间:2024/06/03 16:41
package visitor;public interface IVisitor {void visit(Element element); }
package visitor;public abstract class Element {public abstract void accept(IVisitor visitor); public abstract void doSomething();}
package visitor;public class Visitor implements IVisitor {@Overridepublic void visit(Element element) {// TODO Auto-generated method stubSystem.out.println("对element中的数据进行操作");element.doSomething();}}
package visitor;public class ConcreteElement0 extends Element {@Overridepublic void accept(IVisitor visitor) {// TODO Auto-generated method stubvisitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离}@Overridepublic void doSomething() {// TODO Auto-generated method stubSystem.out.println("这是元素0的方法");}}
package visitor;public class ConcreteElement1 extends Element {@Overridepublic void accept(IVisitor visitor) {// TODO Auto-generated method stubvisitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离}@Overridepublic void doSomething() {// TODO Auto-generated method stubSystem.out.println("这是元素1的方法");}}
package visitor;import java.util.ArrayList;import java.util.List;import java.util.Random;public class ObjectStruture {public static List<Element> getList(){ List<Element> list = new ArrayList<Element>(); Random ran = new Random(); for(int i=0; i<10; i++){ int a = ran.nextInt(100); if(a>50){ list.add(new ConcreteElement0()); }else{ list.add(new ConcreteElement1()); } } return list; } }
package visitor;import java.util.List;public class Client {public static void main(String[] args) {// TODO Auto-generated method stubList<Element> list = ObjectStruture.getList(); for(Element e: list){ e.accept(new Visitor()); } }}简单说一下单分派和多分派:
访问者模式的优点:
访问者模式的适用场景:
最后还是强调一点,不要为了用设计模式而用设计模式。当真正需要时才用,这才是运用设计模式的正确姿势。
1 0
- 设计模式之访问者
- 设计模式之访问者
- 设计模式之访问者模式
- 设计模式之--访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 【设计模式】之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- VPS + ShadowSocks 访问一些网站
- gcc与g++比较
- 刷leetcode过程中记录难度题,自己做法及最优做法
- Supermap-打开数据源失败
- dao模式总结
- 设计模式之---访问者模式
- 关于llvm kaleidoscope: 记一次Debug血泪之路
- Java之反射
- idea中修改某个jsp文件的编码方式
- matplotlib的基本用法(十五)——主次坐标轴
- Java8新特性之Lambda表达式(2)
- 关于购物的简单安卓应用
- 持久化
- Java中的接口和抽象类的区别联系