zoukankan      html  css  js  c++  java
  • java设计模式之责任链模式

    package chainOfResp;
    /**
    * 封装请假的基本信息
    * @author zzdxw
    *
    */
    public class LeaveRequest {
    private String empName;
    private int leaveDays;
    private String reason;
    public LeaveRequest(String empName, int leaveDays, String reason) {
    super();
    this.empName = empName;
    this.leaveDays = leaveDays;
    this.reason = reason;
    }
    public String getEmpName() {
    return empName;
    }
    public void setEmpName(String empName) {
    this.empName = empName;
    }
    public int getLeaveDays() {
    return leaveDays;
    }
    public void setLeaveDays(int leaveDays) {
    this.leaveDays = leaveDays;
    }
    public String getReason() {
    return reason;
    }
    public void setReason(String reason) {
    this.reason = reason;
    }

    }

     package chainOfResp;
    /**
    * 抽象类各个层次主任类经理类 总经理类分别继承改抽奖类。实现抽象方法
    * @author zzdxw
    *
    */
    public abstract class Leader {
    protected String name;
    protected Leader nextLeader;
    public Leader(String name) {
    super();
    this.name = name;
    }
    public void setNextLeader(Leader nextLeader){
    this.nextLeader=nextLeader;
    }
    public abstract void handleRequest(LeaveRequest request);
    }

    //主任类实现该抽象方法但是主任类的权限仅能满足三天假期

    //如果员工请假三天之上那主任 没有权限审批需要到下一个层次经理类进行判断审批

    package chainOfResp;
    /**
    * 主任类
    * @author zzdxw
    *
    */
    public class Director extends Leader{

    public Director(String name) {
    super(name);
    // TODO Auto-generated constructor stub
    }

    @Override
    public void handleRequest(LeaveRequest request) {
    // TODO Auto-generated method stub
    if(request.getLeaveDays()<3){
    System.out.println("员工:"+request.getEmpName()+"天数:"+request.getLeaveDays()+"理由"+request.getReason());
    System.out.println("主任"+this.name+"通过");
    }else{
    if(this.nextLeader!=null){
    this.nextLeader.handleRequest(request);
    }
    }
    }

    }

    //经理类实现该抽象方法但是主任类的权限仅能满足十天假期

    //如果员工请假十天天之上那经理没有权限审批需要到下一个层次总经理类进行判断审批

    package chainOfResp;
    /**
    * 经理类
    * @author zzdxw
    *
    */
    public class Manager extends Leader{

    public Manager(String name) {
    super(name);
    // TODO Auto-generated constructor stub
    }

    @Override
    public void handleRequest(LeaveRequest request) {
    // TODO Auto-generated method stub
    if(request.getLeaveDays()<10){
    System.out.println("员工:"+request.getEmpName()+"天数:"+request.getLeaveDays()+"理由"+request.getReason());
    System.out.println("经理:"+this.name+"通过");
    }else{
    if(this.nextLeader!=null){
    this.nextLeader.handleRequest(request);
    }
    }
    }

    }

    //此类是管理级别的最高权限,如果大于10需要总经理进行同意。

    package chainOfResp;
    /**
    * 总经理类
    * @author zzdxw
    *
    */
    public class GeneraManager extends Leader{

    public GeneraManager(String name) {
    super(name);
    // TODO Auto-generated constructor stub
    }

    @Override
    public void handleRequest(LeaveRequest request) {
    // TODO Auto-generated method stub
    if(request.getLeaveDays()<30){
    System.out.println("员工:"+request.getEmpName()+"天数:"+request.getLeaveDays()+"理由"+request.getReason());
    System.out.println("总经理:"+this.name+"通过");
    }else{
    System.out.println("莫非:"+request.getEmpName()+"想辞职,居然请假"+request.getLeaveDays()+"天");
    }
    }

    }

    //客户端进行测试

    public class Client {
    public static void main(String[] args) {
    Leader a=new Director("张三");
    Leader b=new Manager("李四");
    Leader c=new GeneraManager("王五");
    //设置责任类对象的关系
    a.setNextLeader(b);
    b.setNextLeader(c);
    //开始请假操作
    LeaveRequest req1=new LeaveRequest("zzdxw",10,"结婚");
    a.handleRequest(req1);
    }
    }

  • 相关阅读:
    XX宝面试题——css部分
    XX宝面试题——JS部分
    Struts、JSTL标签库的基本使用方法
    JavaScript:学习笔记(10)——XMLHttpRequest对象
    SpringBoot学习笔记:单元测试
    SpringMVC:学习笔记(11)——依赖注入与@Autowired
    SpringBoot学习笔记:动态数据源切换
    Django:学习笔记(9)——视图
    Django RF:学习笔记(8)——快速开始
    CNN学习笔记:批标准化
  • 原文地址:https://www.cnblogs.com/cyz110/p/6516725.html
Copyright © 2011-2022 走看看