首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

访问者(visitor)方式

2012-07-20 
访问者(visitor)模式访问者模式中的角色:客户方、访问者、被访问者应用场景:被访问者元素变化较小或不改变。

访问者(visitor)模式

访问者模式中的角色:客户方、访问者、被访问者

应用场景:被访问者元素变化较小或不改变。访问者中的方法经常改变。

访问的方法都在访问者中定义。被访问者实现统一接口中的方法,具体方法委托给访问者中的方法实现。

?

被访问者接口:

/** * 被访问者接口 */public interface Visitable {/** * 定义 */public String getDefinition(Visitor visitor);}

?被访问者(高富帅):

public class Gaofushuai implements Visitable {private String personDefinition = "高富帅:高富帅";@Overridepublic String getDefinition(Visitor visitor) {return visitor.getGaofushuaiDefinition(this);}public String getPersonDefinition() {return personDefinition;}public void setPersonDefinition(String personDefinition) {this.personDefinition = personDefinition;}}

?被访问者(屌丝):

public class Diaosi implements Visitable{private String personDefinition = "屌丝:穷矮矬";@Overridepublic String getDefinition(Visitor visitor) {return visitor.getDiaosiDefinition(this);}public String getPersonDefinition() {return personDefinition;}public void setPersonDefinition(String personDefinition) {this.personDefinition = personDefinition;}}

?访问者接口:

/** * 访问者 */public interface Visitor {/* * 屌丝定义 */public String getDiaosiDefinition(Diaosi diaosi);/* * 高富帅定义 */public String getGaofushuaiDefinition(Gaofushuai gaofushuai);}
?

访问者接口实现(人员访问者):

public class PersonVisitor implements Visitor {public void visitPerson(List<Visitable> list){Iterator it = list.iterator();while (it.hasNext()) {Visitable visitable = (Visitable)it.next();System.out.println(visitable.getDefinition(this));}}@Overridepublic String getDiaosiDefinition(Diaosi diaosi) {return diaosi.getPersonDefinition();}@Overridepublic String getGaofushuaiDefinition(Gaofushuai gaofushuai) {return gaofushuai.getPersonDefinition();}}

?客户端访问:

public class VisitorClient {public static void main(String[] args) {List<Visitable> list = new ArrayList<Visitable>();list.add(new Diaosi());list.add(new Gaofushuai());new PersonVisitor().visitPerson(list);}}

?访问结果:

屌丝:穷矮矬

高富帅:高富帅

热点排行