`

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

阅读更多
访问者模式是对迭代器模式的扩充,可以遍历不同的对象,然后执行不同的操作,也就是针对访问的对象不同,执行不同的操作

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

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

分享到:
评论

相关推荐

    设计模式 - 访问者模式

    设计模式 - 访问者模式

    JAVA-设计模式-行为型模式-访问者模式

    JAVA-设计模式-行为型模式-访问者模式

    c++设计模式-行为型模式-访问者模式

    c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...

    设计模式-访问者模式(讲解及其实现代码)

    设计模式-访问者模式(讲解及其实现代码)

    设计模式-访问者模式

    ios 平台实现设计模式-访问者模式,以最简单的代码实现访问者模式讲解,主旨在于了解访问者模式,博客:http://blog.sina.com.cn/s/blog_161d504630102wwxe.html

    java常用设计模式-访问者模式

    java常用设计模式-访问者模式

    java设计模式-访问者模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    设计模式专题之(二十)访问者模式---设计模式访问者模式示例代码(python--c++)

    设计模式专题之(二十)访问者模式--设计模式访问者模式示例代码(python--c++)

    设计模式-访问者(Visitor)模式详解和应用.pdf

    设计模式 -访问者(Visitor)模式详解和应用.pdf

    软件设计与体系结构-设计模式-访问者模式-ppt制作

    访问者模式的简单介绍,计算机相关专业本科生,课程汇报

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    设计模式--C++

    5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第 6 ...

    设计模式-访问者模式(Visitor)

    Visitor(访问者模式)属于行为型模式。意图:表示一个作用于某对象结构中的各元素的操作。

    软件设计模式与体系结构(讲解+代码)

     【例4.5】访问者模式-计算机部件销售软件  【例4.6】命令模式-室内温度控制  【例4.7】命令模式-室内温度控制-2个GUI  【例4.8】命令模式-室内温度控制-3个GUI  【例4.10】中介者模式-旅游信息共享  ...

    23种设计模式 -设计模式图解.7z

    23种设计模式的特点定义、优缺点、使用场景,源码中...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    设计模式C++学习之访问者模式(Visitor)

    设计模式C++学习之访问者模式(Visitor)

    设计模式-类图

    结构型模式 :适配器模式、装饰器模式、代理模式、外观模式、...行为型模式 :策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 ;

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    设计模式之访问者模式

    访问者模式,你绝对会用到的模式,值得学习,通俗易懂的实例,原理和运用都说明白了。

Global site tag (gtag.js) - Google Analytics