Java设计模式-----Visitor访问者模式

来源:互联网 发布:网络改写的小说 编辑:程序博客网 时间:2024/05/17 23:39
 源自:http://www.blogjava.net/flustar/archive/2007/12/15/visitor.html

Visitor访问者模式:

表示一个作用于某对象结构中各元素的操作。它可以使你不修改各元素类的前提下定义作用于这些元素的新操作,也就是动态的增加新的方法。

例子:

public interface Visitor { public void visitElementA(ConcreteElementA elementA);//针对具体元素A的新方法 public void visitElementB(ConcreteElementB elementB);//针对具体元素B的新方法}public interface Element {public void accept(Visitor visitor);}public class ConcreteVisitor implements Visitor {public void visitElementA(ConcreteElementA elementA) {System.out.println(elementA.getName() + " visited by ConcreteVisitor ");}public void visitElementB(ConcreteElementB elementB) {System.out.println(elementB.getName() + " visited by ConcreteVisitor ");}}public class ConcreteElementA implements Element {private String name;public ConcreteElementA(String name) {this.name = name;}public void accept(Visitor visitor) {// 接受访问者调用它针对该元素的新方法visitor.visitElementA(this);}public String getName() {return name;}}public class ConcreteElementB implements Element {private String name;public ConcreteElementB(String name) {this.name = name;}public String getName() {return name;}public void accept(Visitor visitor) {// 接受访问者调用它针对该元素的新方法visitor.visitElementB(this);}}public class ObjectStructure {private Collection<element></element> collection = new ArrayList<element></element>();public void attach(Element element) {collection.add(element);}public void detach(Element element) {collection.remove(element);}public void accept(Visitor visitor) {for (Element element : collection) {element.accept(visitor);}}}public class Client {public static void main(String args[]) {Element elementA = new ConcreteElementA("ElementA");Element elementB = new ConcreteElementB("ElementB");Visitor visitor = new ConcreteVisitor();ObjectStructure os = new ObjectStructure();os.attach(elementA);os.attach(elementB);os.accept(visitor);}}


 

原创粉丝点击