六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 44|回复: 0

Visitor模式

[复制链接]

升级  90%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
45
 楼主| 发表于 2013-1-15 03:02:54 | 显示全部楼层 |阅读模式
import java.util.ArrayList;import java.util.Collection;interface Visitor{ public void visitElementA(ConcreteElementA elementA);//针对具体元素A的新方法 public void visitElementB(ConcreteElementB elementB);//针对具体元素B的新方法}interface Element{ public void accept(Visitor visitor);}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 ");   }}class ConcreteElementA implements Element{//具体元素A private String name; public ConcreteElementA(String name){  this.name=name; }   public void accept(Visitor visitor) {//接受访问者调用它针对该元素的新方法  visitor.visitElementA(this);   } public String getName() {  return name; }  }class ConcreteElementB implements Element{//具体元素B private String name; public ConcreteElementB(String name){  this.name=name; } public String getName() {  return name; } public void accept(Visitor visitor) {//接受访问者调用它针对该元素的新方法  visitor.visitElementB(this);   } }class ObjectStructure{//对象结构即元素的集合 private Collection<Element> collection=new ArrayList<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);    } }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表