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

设计方式-访问者模式

2012-09-24 
设计模式------访问者模式访问者模式是对迭代器模式的扩充,可以遍历不同的对象,然后执行不同的操作,也就是

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

访问者模式是对迭代器模式的扩充,可以遍历不同的对象,然后执行不同的操作,也就是针对访问的对象不同,执行不同的操作把类分成了两个部分,一部分是存储信息的,一部分是展示信息的他和策略模式有相同点哈。。。。但是有那么一点点不同public abstarct class Employee{    ......   public final void report(){        String info = "姓名:" + this.name + "\t";        info = info + "性别:" + (this.sex == FEMALE?"女":"男") + "\t";         info = info + "薪水:" + this.salary + "\t";         //获得员工的其他信息          info = info + this.getOtherInfo();            System.out.println(info);   }        //拼装员工的其他信息      protected abstract String getOtherInfo();}/*** @author cbf4Life cbf4life@126.com* I'm glad to share my knowledge with you all.* 普通员工,也就是最小的小兵*/public class CommonEmployee extends Employee {         //工作内容,这个非常重要,以后的职业规划就是靠这个了         private String job;         public String getJob() {                  return job;         }         public void setJob(String job) {                  this.job = job;         }         protected String getOtherInfo(){                  return "工作:"+ this.job + "\t";         }}/*** @author cbf4Life cbf4life@126.com* I'm glad to share my knowledge with you all.* 经理级人物*/public class Manager extends Employee {              //这类人物的职责非常明确:业绩             private String performance;             public String getPerformance() {                          return performance;             }             public void setPerformance(String performance) {                          this.performance = performance;             }             protected String getOtherInfo(){                          return "业绩:"+ this.performance + "\t";             }}但是不幸的是。。。。一个类中的东西也是不稳定的。。。这个类中的report()方法需要适应不同的变化。。。那么把他们放到CommonEmployee 和Manager 中不就得了。。但是需求是每个类中也不一定稳定。。。比如过几天我就想换一种方法来report()....既然放到实现类中都不稳定。。那么只能用接口啦。。。。public abstarct class Employee{    ......  public abstract void accept(IVisitor visitor); //这里都变,那么只能用接口    }而这里与策略不同的是。。。。策略中的东西侧重点是实现一票其他的算法,这些算法与当事人无关。。。。而访问者中变化的东西还得访问原来的对象。。public class Visitor implements IVisitor {           //访问普通员工,打印出报表           public void visit(CommonEmployee commonEmployee) { //关键点在这里,他接受一个自己的对象,然后再做操作,也就是实现的时候要传一个参数,而这个参数是this而已啦                      System.out.println(this.getCommonEmployee(commonEmployee));           }           //访问部门经理,打印出报表           public void visit(Manager manager) {                      System.out.println(this.getManagerInfo(manager));           }           //组装出基本信息           private String getBasicInfo(Employee employee){                      String info = "姓名:" + employee.getName() + "\t";                      info = info + "性别:" + (employee.getSex() == Employee.FEMALE?"女":"男")           + "\t";                      info = info + "薪水:" + employee.getSalary() + "\t";                      return info;           }           //组装出部门经理的信息           private String getManagerInfo(Manager manager){                      String basicInfo = this.getBasicInfo(manager);                      String otherInfo = "业绩:"+manager.getPerformance() + "\t"                return basicInfo + otherInfo;           }           //组装出普通员工信息           private String getCommonEmployee(CommonEmployee commonEmployee){                      String basicInfo = this.getBasicInfo(commonEmployee);                      String otherInfo = "工作:"+commonEmployee.getJob()+"\t";                      return basicInfo + otherInfo;           }}public class CommonEmployee extends Employee {。。。。。。。@Override      public void accept(IVisitor visitor){           visitor.visit(this);      }}

热点排行