设计模式之---访问者模式
2017-05-05 19:46
141 查看
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 { @Override public void visit(Element element) { // TODO Auto-generated method stub System.out.println("对element中的数据进行操作"); element.doSomething(); } }
package visitor; public class ConcreteElement0 extends Element { @Override public void accept(IVisitor visitor) { // TODO Auto-generated method stub visitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离 } @Override public void doSomething() { // TODO Auto-generated method stub System.out.println("这是元素0的方法"); } }
package visitor; public class ConcreteElement1 extends Element { @Override public void accept(IVisitor visitor) { // TODO Auto-generated method stub visitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离 } @Override public void doSomething() { // TODO Auto-generated method stub System.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 stub List<Element> list = ObjectStruture.getList(); for(Element e: list){ e.accept(new Visitor()); } } }
简单说一下单分派和多分派:
访问者模式的优点:
访问者模式的适用场景:
最后还是强调一点,不要为了用设计模式而用设计模式。当真正需要时才用,这才是运用设计模式的正确姿势。
相关文章推荐
- 设计模式之访问者模式(Visitor1)
- Java设计模式(17) -- 访问者
- 设计模式利剑19--访问者模式
- 设计模式--访问者设计模式
- 设计模式笔记(24)---访问者模式(行为型)
- 设计模式与泡mm的关系之visitor访问者模式及再思考
- 访问者设计模式
- 设计模式--访问者模式(Visitor)
- 设计模式之访问者模式(Visitor)
- .NET设计模式(24):访问者模式(Visitor Pattern)
- 设计模式学习笔记(二十五)——Visitor访问者
- 设计模式之Visitor(访问者)
- 设计模式之访问者(visitor)模式
- [导入]C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.zip(10.41 MB)
- 设计模式之visitor访问者模式
- 设计模式之访问者(visitor)模式
- 设计模式---访问者模式(应该是最后一篇了)
- 设计模式笔记(24)---访问者模式(行为型)
- 设计模式笔记(24)---访问者模式(行为型)
- 设计模式——访问者模式