您的位置:首页 > Web前端

《您的设计模式》(CBF4LIFE)之“访问者模式”【整理】

2016-10-27 13:33 337 查看
通过访问者,访问普通员工、经理的信息。

 

一、单位里所有员工抽象类:

package com.teng.abs;

import com.teng.inter.IVisitor;
/**
* 单位里的员工抽象类
* <br>创建日期:2016年10月21日
* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>
* @author tengxiang
* @since 1.1
* @version 1.1
*/
public abstract class Employee {
public final static int MAN = 0;//男
public final static int WOMAN = 1;//女
//姓名
private String name;
//性别
private int sex;
//薪资
private String salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
//允许一个访问者过来访问
public abstract void accept(IVisitor visitor);
}

二、普通员工实现类

package com.teng.abs;

import com.teng.inter.IVisitor;

/**
* 普通员工
* <br>创建日期:2016年10月21日
* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>
* @author tengxiang
* @since 1.1
* @version 1.1
*/
public class CommonEmployee extends Employee {
//工作内容
private String job;

public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
//允许访问者访问
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}

三、部门经理实现类
package com.teng.abs;

import com.teng.inter.IVisitor;

/**
* 部门经理
* <br>创建日期:2016年10月21日
* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>
* @author tengxiang
* @since 1.1
* @version 1.1
*/
public class Manager extends Employee {
//业绩
private String performance;

public String getPerformance() {
return performance;
}
public void setPerformance(String performance) {
this.performance = performance;
}
//允许访问者访问
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}

}
四、访问者接口

package com.teng.inter;

import com.teng.abs.CommonEmployee;
import com.teng.abs.Manager;

/**
* 访问者接口
* <br>创建日期:2016年10月21日
* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>
* @author tengxiang
* @since 1.1
* @version 1.1
*/
public interface IVisitor {
//普通员工
public void visit(CommonEmployee commonEmployee);
//部门经理
public void visit(Manager manager);
}
五、访问者实现类

package com.teng.abs;

import com.teng.inter.IVisitor;

/**
* 访问者实现类
* <br>创建日期:2016年10月21日
* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>
* @author tengxiang
* @since 1.1
* @version 1.1
*/
public class Visitor implements IVisitor {

//访问普通员工,打印出报表
@Override
public void visit(CommonEmployee commonEmployee) {
System.out.println(getCommonEmployeeInfo(commonEmployee));
}

//访问部门经理,打印出报表
@Override
public void visit(Manager manager) {
System.out.println(getManagerInfo(manager));
}

//组装出基本信息
private String getBasicInfo(Employee employee){
String info = "姓名: " + employee.getName() + "\t";
info += "性别 :" + (employee.getSex() == 0 ?"男":"女")  + "\t";
info += "薪资:" + employee.getSalary() + "\t";
return info;
}

//组装出普通员工信息
private String getCommonEmployeeInfo(CommonEmployee commonEmployee){
String str = getBasicInfo(commonEmployee);
str += "工作:" + commonEmployee.getJob() + "\t";
return str;
}

//组装出部门经理信息
private String getManagerInfo(Manager manager){
String str = getBasicInfo(manager);
str += "业绩:" + manager.getPerformance() + "\t";
return str;
}
}


六、主方法的调用
package com.teng.abs;

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

/**
* 主方法
* <br>创建日期:2016年10月21日
* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>
* @author tengxiang
* @since 1.1
* @version 1.1
*/
public class Client {
public static void main(String[] args) {
for(Employee employee : getEmployee()){
employee.accept(new Visitor());
}
}

//模拟出公司的人员情况
private static List<Employee> getEmployee(){
List<Employee> list = new ArrayList<Employee>();

//产生张三员工
CommonEmployee zhangSan = new CommonEmployee();
zhangSan.setName("张三");
zhangSan.setSex(Employee.MAN);
zhangSan.setSalary("5000");
zhangSan.setJob("测试");
list.add(zhangSan);

//产生李四员工
CommonEmployee liSi = new CommonEmployee();
liSi.setName("李四");
liSi.setSex(Employee.WOMAN);
liSi.setSalary("6000");
liSi.setJob("美工");
list.add(liSi);

//产生王五经理
Manager wangWu = new Manager();
wangWu.setName("王五");
wangWu.setSex(Employee.MAN);
wangWu.setSalary("10000");
wangWu.setPerformance("优");
list.add(wangWu);
return list;
}
}
1)首先通过循环遍历所有元素;

2)其次,每个员工对象都定义了一个访问者;

3)再其次,员工对象把自己做为一个参数调用访问者visit方法;

4)然后,访问者调用自己内部的计算逻辑,计算出相应的数据和表格元素;

5)最后,访问者打印出报表和数据;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式
相关文章推荐