访问者模式(Visitor)
/** * 抽象访问者角色 * @author wdt * */interface IVisitor { public void visit(Element1 el1); public void visit(ConcreteElement2 el2); } /** * * @author wdt * 具体访问者角色 * 实现抽象访问者的方法 */class Visitor implements IVisitor { /** * el1为被访问的对象 */ public void visit(ConcreteElement1 el1) { ---这里还可以做点什么? el1.doSomething(); } public void visit(ConcreteElement2 el2) { el2.doSomething(); } }
?
/** * 抽象访问者角色 * @author wdt * */interface IVisitor { public void visit(ConcreteElement1 el1); public void visit(ConcreteElement2 el2); } /** * 具体元素对象 实现抽象元素对象的方法 * @author wdt * */class ConcreteElement1 extends Element { public void doSomething(){ System.out.println("这是元素1"); } public void accept(IVisitor visitor) { visitor.visit(this); } } class ConcreteElement2 extends Element { public void doSomething(){ System.out.println("这是元素2"); } public void accept(IVisitor visitor) { visitor.visit(this); } }
?
? ??
public class Client { public static void main(String[] args){ List<Element> list = new ArrayList<Element>(); list.add(new ConcreteElement1()); list.add(new ConcreteElement2()); for(Element e: list){ e.accept(new Visitor()); //接见访问者 } } }
?
?
使用场景:
? ? ?1、一些对象关系比较弱的行为,可以使用访问者模式,将这些弱关系行为放在访问者中。
? ? ?