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);
    }
    }

  • 相关阅读:
    详解Twitter开源分布式自增ID算法snowflake(附演算验证过程)
    分布式自增ID算法-Snowflake详解
    关于分布式唯一ID,snowflake的一些思考及改进(完美解决时钟回拨问题)
    分布式ID增强篇--优化时钟回拨问题
    专题:性能调优之工具---perf
    Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,消息队列有什么优点和缺点
    Zookeeper框架Curator使用
    Zookeeper 3.5启动时 8080端口被占用
    Qt状态机框架(状态机就开始异步的运行了,也就是说,它成为了我们应用程序事件循环的一部分了)
    Qt插件开发入门(两种方法:High-Level API接口,Low-Level API接口)
  • 原文地址:https://www.cnblogs.com/cyz110/p/6516725.html
Copyright © 2011-2022 走看看