`

设计模式----访问者模式(visitor pattern)

 
阅读更多
IVisitor.java代码如下:
package com.designPattern.visitor;

public interface IVisitor {

	public void visit(CommonEmployee commonEmployee);
	
	public void visit(Manager manager);
}



Visitor.java代码如下:
 package com.designPattern.visitor;

public class Visitor implements IVisitor{

	@Override
	public void visit(CommonEmployee commonEmployee) {
		System.out.println(this.getCommonEmployee(commonEmployee));
	}

	@Override
	public void visit(Manager manager) {
		System.out.println(this.getManagerInfo(manager));
	}
	
	private String getBasicInfo(Employee employee){
		String info = "姓名:"+employee.getName()+"\t"+"性别:"+(employee.getSex()==Employee.FEMALE?"女":"男")+"\t"+"薪水:"+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;
	}

}



Employee.java代码如下:
package com.designPattern.visitor;

public abstract class Employee {

	public final static int MALE = 0;
	
	public final static int FEMALE = 1;
	
	private String name;
	
	private int salary;
	
	private int sex ;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}

	public int getSex() {
		return sex;
	}

	public void setSex(int sex) {
		this.sex = sex;
	}
	
	public abstract void accept(IVisitor visitor);
	
}



Manager.java代码如下:
 package com.designPattern.visitor;

public class Manager extends Employee{

	private String performance ;
	
	public String getPerformance() {
		return performance;
	}

	public void setPerformance(String performance) {
		this.performance = performance;
	}

	public void accept(IVisitor visitor) {
 		visitor.visit(this);
	}

}



CommonEmployee.java代码如下:
 package com.designPattern.visitor;

public class CommonEmployee extends Employee{

	private String job;
	
	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public void accept(IVisitor visitor) {
		visitor.visit(this);
	}

}



Client.java代码如下:
 package com.designPattern.visitor;

import java.util.ArrayList;
import java.util.List;

public class Client {

	public static void main(String[] args) {
		for(Employee employee:mockEmployee()){
			employee.accept(new Visitor());
		}
	}
	
	public static List<Employee> mockEmployee(){
		List<Employee> employeeList = new ArrayList<Employee>();
		
		CommonEmployee zhangsan = new CommonEmployee();
		zhangsan.setJob("java开发工程师");
		zhangsan.setName("张三");
		zhangsan.setSalary(1900);
		zhangsan.setSex(Employee.MALE);
		employeeList.add(zhangsan);
		
		
		CommonEmployee liSi = new CommonEmployee();
		liSi.setJob("美工");
		liSi.setName("李四");
		liSi.setSalary(4000);
		liSi.setSex(Employee.FEMALE);
		employeeList.add(liSi);
		
		Manager wangwu = new Manager();
		wangwu.setName("王五");
		wangwu.setPerformance("业绩很好");
		wangwu.setSalary(20000);
		wangwu.setSex(Employee.MALE);
		employeeList.add(wangwu);
		
		return employeeList;
	}
}



运行结果如下:
姓名:张三	性别:男	薪水:1900	工作:java开发工程师	
姓名:李四	性别:女	薪水:4000	工作:美工	
姓名:王五	性别:男	薪水:20000	业绩:业绩很好	
分享到:
评论

相关推荐

    design-pattern-java.pdf

    算法的封装与切换——策略模式(四) 模板方法模式-Template Method Pattern 模板方法模式深度解析(一) 模板方法模式深度解析(二) 模板方法模式深度解析(三) 访问者模式-Visitor Pattern 操作复杂对象结构——...

    设计模式之访问者模式(Visitor Pattern)

    表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

    访问者模式(Visitor)原理图

    访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...

    用Java实现23种设计模式

    访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 数据访问对象模式(Dao Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器...

    C#版 24种设计模式

    策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor Pattern) 工厂方法模式(Factory ...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: ...访问者模式(Visitor)

    C#设计模式.PDF

    设计模式(20)-Visitor Pattern 192 一、 访问者(Visitor)模式 192 二、 访问者模式的结构 193 三、 示意性源代码 194 四、 一个实际应用Visitor模式的例子 198 五、 在什么情况下应当使用访问者模式 202 六、 ...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN ...18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式

    33种JAVA设计模式DEMO

    访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 组合实体模式(Composite ...

    设计模式PPT

    创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:  工厂方法模式(Factory Method Pattern)  抽象工厂模式(Abstract Factory Pattern)  建造者模式(Builder... 访问者模式(Visitor Pattern)

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5.... 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    C#设计模式大全

    设计模式(20)-Visitor Pattern 一、 访问者(Visitor)模式 二、 访问者模式的结构 三、 示意性源代码 四、 一个实际应用Visitor模式的例子 五、 在什么情况下应当使用访问者模式 六、 使用访问者模式的...

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...

    Fast-Tree-Visitor-Visitor-pattern

    快速树访问者访问者模式 设计一个开发以下两个访问者的访问者:一个访问者,它读取输入文件input.txt,并用文件中的所有单词填充树数据结构。 使用树数据结构将第二位访问者的性能最大化。 使用该树数据结构的插入...

    32种设计模式

    C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) ... 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计...pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式

    设计模式:可复用面向对象软件的基础--详细书签版

    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 总结 ...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式...22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式 design pattern

    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...

Global site tag (gtag.js) - Google Analytics