设计模式 之 访问者模式
程序员文章站
2022-05-04 11:07:18
...
下载 23种设计模式源码 :http://download.csdn.net/download/knight_black_bob/8936043
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
创建型模式,共五种:
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式,共七种:
适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式
行为型模式,共十一种:
策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package 设计模式.访问者模式; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年7月27日 上午10:02:46 * des: */ public interface Visitable { public void accept(Visitor visitor); }
package 设计模式.访问者模式; import java.util.Collection; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年7月27日 上午10:03:07 * des: */ public interface Visitor { public void visitString(StringElement stringE); public void visitFloat(FloatElement floatE); public void visitCollection(Collection collection); }
package 设计模式.访问者模式; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年7月27日 上午10:04:06 des: */ public class StringElement implements Visitable { private String value; public String getValue() { return value; } public StringElement(String value) { this.value = value; } @Override public void accept(Visitor visitor) { visitor.visitString(this); } }
package 设计模式.访问者模式; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年7月27日 上午10:04:30 * des: */ public class FloatElement implements Visitable { private Float value; public Float getValue() { return value; } public FloatElement(Float value) { this.value = value; } @Override public void accept(Visitor visitor) { visitor.visitFloat(this); } }
package 设计模式.访问者模式; import java.util.Collection; import java.util.Iterator; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年7月27日 上午10:05:29 * des: */ public class ConcreteVisitor implements Visitor { @Override public void visitString(StringElement stringE) { System.out.println("i'm a string ,value is "+ stringE.getValue()); } @Override public void visitFloat(FloatElement floatE) { System.out.println("i'm a float ,value is "+ floatE.getValue()); } @Override public void visitCollection(Collection collection) { Iterator iterator = collection.iterator(); while (iterator.hasNext()) { Object o = iterator.next(); if (o instanceof Visitable) { ((Visitable) o).accept(this); } } } }
package 设计模式.访问者模式; import java.util.ArrayList; import java.util.Collection; /** * * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年7月27日 上午9:51:23 * des: */ public class VisitorTest { public static void main(String[] args) { Visitor v = new ConcreteVisitor(); StringElement se = new StringElement("BAOYOU"); v.visitString(se); Collection list = new ArrayList<>(); list.add(new StringElement("baoyou")); list.add(new StringElement("baoyou2")); list.add(new FloatElement( new Float(12))); v.visitCollection(list); } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!