设计模式之访问者模式
来源:互联网 发布:淘宝抢购软件 编辑:程序博客网 时间:2024/06/08 01:00
protected String no;
protected String name;
protected String position;
protected float salary;
private int length = 0;
public Emp(String no, String name, String position, float salary) {
this.no = no;
this.name = name;
this.position = position;
this.salary = salary;
this.length += (null==no || "".equals(no.trim()))?0:no.getBytes().length;
this.length += (null==name || "".equals(name.trim()))?0:name.getBytes().length;
this.length += (null==position || "".equals(position.trim()))?0:position.getBytes().length;
this.length += String.valueOf(salary).getBytes().length;
}
public void printBaseInfo(){
System.out.println("-|"+no+" "+name+" "+position+" "+salary);
}
public abstract void addEmp(Emp emp);
public abstract Emp removeEmp(String no);
public abstract void printEmpsInfo(int layer);
public abstract void acceptVisitor(IVisitor visitor);
protected void printChar(int layer){
for (int i = 0; i <layer*2; i++) {
System.out.print("-");
}
}
protected void printLine(){
System.out.println("+");
for (int i = 0; i <length+4; i++) {
System.out.print("-");
}
System.out.println("-");
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
}
public class Emploee extends Emp {
public Emploee(String no, String name, String position, float salary) {
super(no, name, position, salary);
}
@Override
public void addEmp(Emp emp) {
return;
}
@Override
public void printEmpsInfo(int layer) {
return;
}
@Override
public Emp removeEmp(String no) {
return null;
}
@Override
public void acceptVisitor(IVisitor visitor) {
visitor.visit(this);
}
}
public class Manager extends Emp {
private List<Emp> list = new ArrayList<Emp>();
public Manager(String no, String name, String position, float salary) {
super(no, name, position, salary);
}
@Override
public void addEmp(Emp emp) {
list.add(emp);
}
@Override
public void printEmpsInfo(int layer) {
int tem = ++layer;
for (int i = 0; i < list.size(); i++) {
if(list.get(i)==null){
continue;
}
printChar(tem);
list.get(i).printBaseInfo();
list.get(i).printEmpsInfo(tem);
}
}
@Override
public Emp removeEmp(String no) {
Emp emp = null;
if(no!=null && "".equals(no.trim())){
for (int i = 0; i < list.size(); i++) {
if(list.get(i)==null){
continue;
}
if(no.equals(list.get(i).getNo())){
emp = list.remove(i);
break;
}
}
}
return emp;
}
@Override
public void acceptVisitor(IVisitor visitor) {
visitor.visit(this);
for (int i = 0; i < this.list.size(); i++) {
if(null == this.list.get(i)){
continue;
}
this.list.get(i).acceptVisitor(visitor);
}
}
}
public interface IVisitor {
public void visit(Manager manager);
public void visit(Emploee emploee);
}
public class BaseInfoVisitor implements IVisitor {
@Override
public void visit(Manager manager) {
System.out.println("-管理者");
manager.printBaseInfo();
}
@Override
public void visit(Emploee emploee) {
System.out.println("-底层员工");
emploee.printBaseInfo();
}
}
public interface ISalaryVisitor extends IVisitor{
public void printManagerTotalSalary();
public void printEmploeeTotalSalary();
public void printTotalSalary();
}
public class SalaryVisitor implements ISalaryVisitor {
private float managerSalary;
private float emploeeSalary;
public SalaryVisitor() {
this.managerSalary = 0;
this.emploeeSalary = 0;
}
@Override
public void printEmploeeTotalSalary() {
System.out.println("底层员工薪资总合: "+emploeeSalary);
}
@Override
public void printManagerTotalSalary() {
System.out.println("管理者薪资总合: "+managerSalary);
}
@Override
public void printTotalSalary() {
System.out.println("所有员工薪资总合: "+(emploeeSalary+managerSalary));
}
@Override
public void visit(Manager manager) {
this.managerSalary += manager.getSalary();
}
@Override
public void visit(Emploee emploee) {
this.emploeeSalary += emploee.getSalary();
}
}
测试
public class Client {
public static void main(String[] args) {
Emp bossEmp = new Manager("1", "大Boss", "CEO", 100000);
Emp fianceEmp = new Manager("11", "张总", "财务经理", 60000);
Emp personEmp = new Manager("12", "夏总", "人事经理", 60000);
Emp techniEmp = new Manager("13", "熊总", "技术经理", 60000);
Emp deptEmp = new Manager("1301", "王助理", "部门经理", 20000);
Emp tecEmp = new Manager("1302", "车主管", "部门主管", 30000);
Emp softEng1 = new Emploee("1302001", "张三", "软件工程师", 5000);
Emp softEng2 = new Emploee("1302002", "李四", "硬件工程师", 5000);
Emp softEng3 = new Emploee("1302003", "王五", "测试工程师", 5000);
tecEmp.addEmp(softEng1);
tecEmp.addEmp(softEng2);
tecEmp.addEmp(softEng3);
techniEmp.addEmp(deptEmp);
techniEmp.addEmp(tecEmp);
bossEmp.addEmp(fianceEmp);
bossEmp.addEmp(personEmp);
bossEmp.addEmp(techniEmp);
bossEmp.printBaseInfo();
bossEmp.printEmpsInfo(1);
System.out.println("-----------------------------------");
techniEmp.printBaseInfo();
techniEmp.printEmpsInfo(2);
System.out.println("-----------------------------------");
softEng1.printBaseInfo();
softEng1.printEmpsInfo(4);
System.out.println("-------------------==================----------------");
bossEmp.acceptVisitor(new BaseInfoVisitor());
ISalaryVisitor salaryVisitor = new SalaryVisitor();
bossEmp.acceptVisitor(salaryVisitor );
salaryVisitor.printEmploeeTotalSalary();
salaryVisitor.printManagerTotalSalary();
salaryVisitor.printTotalSalary();
}
}
- 设计模式之访问者
- 设计模式之访问者
- 设计模式之访问者模式
- 设计模式之--访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 【设计模式】之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 设计模式之访问者模式
- 简单实用的 Ubuntu 快捷键
- 读某大型网站技术架构总结
- java EE中的任务定时器,当到某个时间的时候执行相应的操作
- mysql blob字段导入
- Win8.1无法安装msi软件提示2502、2503错误怎么解决?
- 设计模式之访问者模式
- listview添加头部后判断是否到达顶部的方法
- spring 与struts 整合
- Cpp--STL的组成
- C++获取可使用的COM口列表
- 零基础入门学习Python(6):列表(续)
- HDU 2079 选课时间 【附dp解法】
- Win8.1无法安装msi软件提示2502、2503错误怎么解决?
- Oracle内连接、外连接、右外连接、全外连接小总结