某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批

某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批;如果超过30天,总经理也不能审批,提示相应的拒绝信息。

要求绘制相应的类图并使用Java语言编程模拟实现。

UML类图
在这里插入图片描述

package com.zheng;

public abstract class Approver {
	protected Approver successor;//定义后继对象
	protected String name;//审批者姓名
	public Approver(String name) {
		this.name=name;
	}
	
	//设置后继审批者
	public void setSuccessor(Approver successor) {
		this.successor=successor;
	}
	//抽象请求处理方法
	public abstract void processRequest(PurchaseRequest request);

}
package com.zheng;

public class PurchaseRequest {
	private int time;   //请假时间
	public PurchaseRequest(int time) {
		this.time=time;
	}

	public int getTime() {
		return time;
	}

	public void setTime(int time) {
		this.time = time;
	}
	
}

package com.zheng;

public class Director extends Approver {
	public Director(String name) {
		super(name);
	}
//具体请求处理方法
	@Override
	public void processRequest(PurchaseRequest request) {
		if(request.getTime()<3) {
			System.out.println("主任"+this.name+"批准请假:"+request.getTime());
			System.out.println("请假成功");
			
		}else {
			this.successor.processRequest(request);//转发请求
		}
		
	}

}
package com.zheng;

public class VicePresident extends Approver {
	public VicePresident(String name) {
		super(name);
	}
//具体请求处理方法
	@Override
	public void processRequest(PurchaseRequest request) {
		if(request.getTime()<10) {
			System.out.println("经理"+this.name+"批准请假:"+request.getTime());
			System.out.println("请假成功");
		}else {
			this.successor.processRequest(request);//转发请求
		}
		
	}

}
package com.zheng;

public class President extends Approver {
	public President(String name) {
		super(name);
	}
//具体请求处理方法
	@Override
	public void processRequest(PurchaseRequest request) {
		if(request.getTime()<30) {
			System.out.println("总经理"+this.name+"批准请假:"+request.getTime());
			System.out.println("请假成功");
		}else {
			System.out.println("对不起,请假时间太长。总经理无权批假。");
		}
		
	}

}
package com.zheng;

import java.util.Scanner;

public class Client {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//职责中的关系对象
		Approver w1,w2,w3;
		w1=new Director("小红1");
		w2=new VicePresident("小红2");
		w3=new President("小红3");
		//创建职责链
		w1.setSuccessor(w2);
		w2.setSuccessor(w3);
		while(true) {
			Scanner scan=new Scanner(System.in);
			System.out.println("请输入请假天数:");
			int time=scan.nextInt();		
			PurchaseRequest pr1=new PurchaseRequest(time);
			w1.processRequest(pr1);
		}	
	}
}

运行截图
在这里插入图片描述
职责链模式优点:1、降低了系统的耦合性。2、简化了对象之间的相互连接。3、可以灵活的增加对请求处理的职责。4、符合开闭原则
职责链模式缺点:1、一个请求没有具体的接受者,客户发出的请求可能得不到解决。2、建链不当,可能会造成系统陷入死循环。3、对于较长的请求、每个处理对象可能都会处理一部分。对系统的性能造成一定的影响。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿_小郑.

整理不易、多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值