《您的设计模式》(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 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)最后,访问者打印出报表和数据;
一、单位里所有员工抽象类:
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)最后,访问者打印出报表和数据;
相关文章推荐
- 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“责任链模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“工厂方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“策略模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“抽象工厂模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“组合模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“桥梁模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“代理模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“多例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“单例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“迭代器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“模板方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“适配器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“建造者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“装饰模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“门面模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“命令模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“观察者模式”【整理】
- [整理]C#面向对象设计模式纵横谈(2):Singleton单件(创建型模式)
- 好书整理系列之-设计模式:可复用面向对象软件的基础 3