您的位置:首页 > 编程语言 > Java开发

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

2011-12-14 01:05 806 查看
源自: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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: