visit pattern是一种行为模式。主要特点是一个可遍历数据结构和比较稳固的对象,对于对象行为则可以方便添加,并且可以根据对象的类型表现不同的行为。
访问者模式类图:
[img]http://dl.iteye.com/upload/attachment/364939/55cf35cc-e52a-31ac-a1d1-d02bf7aec7fc.jpg[/img]
具体实现demo:
对象接口
具体对象
具体对象2
访问者接口:
测试类
备注:优点在于很方便的添加访问者,而不用去改变对象的其他属性或是实现。
访问者模式类图:
[img]http://dl.iteye.com/upload/attachment/364939/55cf35cc-e52a-31ac-a1d1-d02bf7aec7fc.jpg[/img]
具体实现demo:
对象接口
package visitorPattern;
public interface Person {
void accept(Visitor visitor);
}
具体对象
package visitorPattern;
public class Man implements Person{
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
具体对象2
package visitorPattern;
public class Woman implements Person{
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
访问者接口:
package visitorPattern;
public interface Visitor {
void visit(Man man);
void visit(Woman woman);
}
package visitorPattern;
public class Shop implements Visitor{
@Override
public void visit(Man man) {
System.out.println("Shopping is boring for " +man.getClass());
}
@Override
public void visit(Woman woman) {
// TODO Auto-generated method stub
System.out.println("Shopping is funny for " +woman.getClass());
}
}
package visitorPattern;
public class Work implements Visitor{
@Override
public void visit(Man man) {
// TODO Auto-generated method stub
System.out.println("Working is not so bad for " +man.getClass());
}
@Override
public void visit(Woman woman) {
// TODO Auto-generated method stub
System.out.println("Working is quite a hard time for " +woman.getClass());
}
}
测试类
package visitorPattern;
import java.util.ArrayList;
public class visitPatternTest {
public static void main(String[]args){
Man man = new Man();
Woman woman = new Woman();
ArrayList<Person> arrayList = new ArrayList<Person>();
ObjectStructrue o1 = new ObjectStructrue(arrayList);
o1.add(woman);
o1.add(man);
Work work = new Work();
o1.show(work);
System.out.println("------------------------------");
Shop shop = new Shop();
o1.show(shop);
}
}
备注:优点在于很方便的添加访问者,而不用去改变对象的其他属性或是实现。