MyException - 我的异常网
当前位置:我的异常网» 设计模式 » 设计方式-访问者模式

设计方式-访问者模式

www.MyException.Cn  网友分享于:2013-09-25  浏览:1次
设计模式------访问者模式
访问者模式是对迭代器模式的扩充,可以遍历不同的对象,然后执行不同的操作,也就是针对访问的对象不同,执行不同的操作

把类分成了两个部分,一部分是存储信息的,一部分是展示信息的

他和策略模式有相同点哈。。。。但是有那么一点点不同
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);
      }
}

文章评论

10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
一个程序员的时间管理
一个程序员的时间管理
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员应该关注的一些事儿
程序员应该关注的一些事儿
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我是如何打败拖延症的
我是如何打败拖延症的
 程序员的样子
程序员的样子
旅行,写作,编程
旅行,写作,编程
10个调试和排错的小建议
10个调试和排错的小建议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
如何成为一名黑客
如何成为一名黑客
为什么程序员都是夜猫子
为什么程序员都是夜猫子
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员都该阅读的书
程序员都该阅读的书
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员必看的十大电影
程序员必看的十大电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
那些争议最大的编程观点
那些争议最大的编程观点
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
漫画:程序员的工作
漫画:程序员的工作
中美印日四国程序员比较
中美印日四国程序员比较
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
鲜为人知的编程真相
鲜为人知的编程真相
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
每天工作4小时的程序员
每天工作4小时的程序员
编程语言是女人
编程语言是女人
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
代码女神横空出世
代码女神横空出世
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有