类图
场景
委任了一位访问者(Visitor),负责在客户进门时,询问他要办理什么业务,告诉他应该去哪个窗口办理。这样,每个窗口的业务员就只负责一项业务,减少了在不同业务间切换的时间耗费 ,效率大大提高。更重要的是,当某一项业务的处理流程发生变更时,不需要同时麻烦三个窗口的业务员,而只需要让处理这项业务的业务员进行修改就可以了 。
Java代码
public class Visitor {
public void process(Service service){
// 基本业务
System.out.println("基本业务");
}
public void process(Saving service){
// 存款
System.out.println("存款");
}
public void process(Draw service){
// 提款
System.out.println("提款");
}
public void process(Fund service){
System.out.println("基金");
// 基金
}
}
服务接口
package visitor;
public interface Service {
public void accept(Visitor visitor);
}
存款
class Saving implements Service {
public void accept(Visitor visitor) {
visitor.process(this);
}
取款
public class Draw implements Service {
public void accept(Visitor visitor) {
visitor.process(this);
}
}
基金
public class Fund implements Service {
public void accept(Visitor visitor) {
visitor.process(this);
}
}
public class Test {
//访问者模式实现方法
public static void main(String[] args) {
Service s1 = new Saving();
Service s2 = new Draw();
Service s3 = new Fund();
Visitor visitor = new Visitor();
s1.accept(visitor);
s2.accept(visitor);
s3.accept(visitor);
}
//普通实现方法
// public static void main(String[] args) {
// Service s1 = new Saving();
// Service s2 = new Draw();
// Service s3 = new Fund();
//
// //要办理业务的三个客户队列
// List<Service> list = new ArrayList<Service>();
// list.add(s1);
// list.add(s2);
// list.add(s3);
//
// Iterator<Service> it = list.iterator();
// while(it.hasNext()){
// Service s = it.next();
// if (s instanceof Saving){
// System.out.println("存款");
//
// }else if (s instanceof Draw){
// System.out.println("取款");
//
// }else if (s instanceof Fund){
// System.out.println("基金");
// }
//
// }
//
//
//
// }
}
参考
|