`

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

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

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

他和策略模式有相同点哈。。。。但是有那么一点点不同
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)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...

    C++设计模式--基于Qt4开源跨平台开发框架

    行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...

    设计模式-访问者模式

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

    设计模式 - 访问者模式

    访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下向其添加新的操作。这种模式常用于处理具有相同接口或抽象类的对象结构,使得可以在不改变原有结构的基础上增加功能,实现对...

    java设计模式-访问者模式

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

    C++设计模式-基于QT4开源跨平台开发框架 源码

    3. **观察者模式** - QT4的信号和槽机制是观察者模式的实现。当一个对象的某个状态改变时,它可以发出信号,其他对象可以通过连接这些信号并定义槽函数来响应这些变化,实现了事件驱动的编程模型。 4. **装饰器模式...

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

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

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 在C++中,这些设计模式通常通过面向对象的特性,如继承、封装和多态来实现...

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

    访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向一组已存在的类添加新的行为,而无需修改这些类。这种模式的核心思想是在不改变元素类的前提下,通过引入新的访问者来扩展系统的功能。 #### 二、...

    Java设计模式----通俗易懂版

    - 访问者模式:表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义新的操作。 通过这个"通俗易懂版"的学习资源,你将能够深入理解每种设计模式的原理,掌握如何在实际项目中应用...

    软件设计模式--填空题+简答题(复习7).rar

    设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代器、访问者、备忘录、...

    设计模式课件大全

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

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    设计模式-C++

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

    23种 设计模式---面向对象的基本原则

    - 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 这些设计模式不仅在PHP中适用,也是跨语言的编程思想,可以帮助开发者...

    时间触发嵌入式系统设计模式--配套光盘

    在8051微控制器上实现这种设计模式,需要考虑处理器的时钟周期、中断响应时间以及存储器访问速度等因素,以确保时间约束得到满足。 此外,8051系列微控制器的开发通常涉及汇编语言编程或C语言编程,这两种语言都能...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

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

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...

Global site tag (gtag.js) - Google Analytics