首页 > 其他分享 >15.职责链模式

15.职责链模式

时间:2022-11-05 21:00:41浏览次数:42  
标签:15 name 模式 public handleRequest GoodsBuy Leader goodsBuy 职责

[实验任务一]:财务审批

某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。

类图

image

代码

java代码

package test15;

public class AllStaff extends Leader{
    public AllStaff(String name) {
        super(name);
    }

    @Override
    public void handleRequest(GoodsBuy buy) {
        if (buy.getYuan()>20){
            System.out.println("召开职工大会确定采购"+buy.getYuan()+"万元的采购单");
        }
    }
}
package test15;

public class Client {

    public static void main(String[] args) {
        Leader a1,a2,a3,a4,a5;
        a1 = new Director("a1");
        a2 = new DepartmentManager("a2");
        a3 = new FuManager("a3");
        a4 = new ZongManager("a4");
        a5 = new AllStaff("a5");

        a1.setSuccessor(a2);
        a2.setSuccessor(a3);
        a3.setSuccessor(a4);
        a4.setSuccessor(a5);

        GoodsBuy goodsBuy = new GoodsBuy(12);

        a1.handleRequest(goodsBuy);
    }

}
package test15;

public class DepartmentManager extends Leader{

    public DepartmentManager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(GoodsBuy buy) {
        if(buy.getYuan()<5){
            System.out.println("部门经理"+name+"审批"+buy.getYuan()+"万元的采购单");
        }else {
            if(this.successor!=null){
                this.successor.handleRequest(buy);
            }
        }
    }
}
package test15;

public class Director extends Leader{

    public Director(String name) {
        super(name);
    }

    @Override
    public void handleRequest(GoodsBuy buy) {
        if(buy.getYuan()<1){
            System.out.println("主任"+name+"审批"+buy.getYuan()+"万元的采购单");
        }else {
            if(this.successor!=null){
                this.successor.handleRequest(buy);
            }
        }
    }
}
package test15;

public class FuManager extends Leader{
    public FuManager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(GoodsBuy buy) {
        if (buy.getYuan()<10){
            System.out.println("副总经理"+name+"审批"+buy.getYuan()+"万元的订单");
        }else {
            if (this.successor!=null){
                this.successor.handleRequest(buy);
            }
        }
    }
}
package test15;

public class GoodsBuy {

    private int yuan;

    public GoodsBuy(int yuan){
        this.yuan = yuan;
    }

    public void setYuan(int yuan) {
        this.yuan = yuan;
    }

    public int getYuan() {
        return yuan;
    }
}
package test15;

public abstract class Leader {

    protected String name;
    /*
    ==关键类==
    这个Leader就像C++中的指针一样
     */
    protected Leader successor;

    public Leader(String name){
        this.name = name;
    }

    public void setSuccessor(Leader successor) {
        this.successor = successor;
    }

    public abstract void handleRequest(GoodsBuy buy);
}
package test15;

public class ZongManager extends Leader{
    public ZongManager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(GoodsBuy buy) {
        if (buy.getYuan()<20){
            System.out.println("总经理"+name+"审批"+buy.getYuan()+"万元的采购单");
        }else {
            if (this.successor!=null){
                successor.handleRequest(buy);
            }
        }
    }
}

c++代码

#include <iostream>
using namespace std;

class GoodsBuy{
private:
    int yuan;
public:
    GoodsBuy(int yuan){ this->yuan = yuan;}
    int getYuan(){return this->yuan;}
};

class Leader{
protected:
    string name;
    Leader* leader;
public:
    Leader(string name){
        this->name = name;
    }
    void setSuccessor(Leader* leader){
        this->leader = leader;
    }
    virtual void handleRequest(GoodsBuy goodsBuy){}
};

class DepartmentManager:public Leader{
public:
    DepartmentManager(string name):Leader(name){}
    void handleRequest(GoodsBuy goodsBuy){
        if(goodsBuy.getYuan()<5){
            cout<<"部门经理"+name+"审批";
            cout<<goodsBuy.getYuan();
            cout<<"万元的采购单";
        } else{
            leader->handleRequest(goodsBuy);
        }
    }
};

class Director:public Leader{
public:
    Director(string name):Leader(name){}
    void handleRequest(GoodsBuy goodsBuy){
        if(goodsBuy.getYuan()<1){
            cout<<"主任"+name+"审批";
            cout<<goodsBuy.getYuan();
            cout<<"万元的采购单";
        } else{
            leader->handleRequest(goodsBuy);
        }
    }
};

class FuManager:public Leader{
public:
    FuManager(string name):Leader(name){}
    void handleRequest(GoodsBuy goodsBuy){
        if(goodsBuy.getYuan()<10){
            cout<<"主任"+name+"审批";
            cout<<goodsBuy.getYuan();
            cout<<"万元的采购单";
        } else{
            leader->handleRequest(goodsBuy);
        }
    }
};

class ZongManager:public Leader{
public:
    ZongManager(string name):Leader(name){}
    void handleRequest(GoodsBuy goodsBuy){
        if(goodsBuy.getYuan()<20){
            cout<<"总经理"+name+"审批";
            cout<<goodsBuy.getYuan();
            cout<<"万元的采购单";
        } else{
            leader->handleRequest(goodsBuy);
        }
    }
};

class AllStaff: public Leader{
public:
    AllStaff(string name):Leader(name){}
    void handleRequest(GoodsBuy goodsBuy){
        if(goodsBuy.getYuan()>20){
            cout<<"召开职工大会确定采购";
            cout<<goodsBuy.getYuan();
            cout<<"万元的采购单";
        } else{
            leader->handleRequest(goodsBuy);
        }
    }
};

int main(){
    Director a1("a1");
    DepartmentManager a2("a2");
    FuManager a3("a3");
    ZongManager a4("a4");
    AllStaff a5("a5");

    a1.setSuccessor(&a2);
    a2.setSuccessor(&a3);
    a3.setSuccessor(&a4);
    a4.setSuccessor(&a5);

    GoodsBuy goodsBuy(12);

    a1.handleRequest(goodsBuy);
}

标签:15,name,模式,public,handleRequest,GoodsBuy,Leader,goodsBuy,职责
From: https://www.cnblogs.com/java-six/p/16861276.html

相关文章

  • 【115】
    1106. 解析布尔表达式 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。有效的表达式需遵循以下约定:"t",运算结果为 ......
  • 简单工厂模式带实战(不属于GOF的23种经典设计模式)
    简单工厂模式带实战(不属于GOF的23种经典设计模式)1、描述简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单......
  • 一本通 1593
    农场主 John 新买了一块长方形的新牧场,m*n (1≤M≤12;1≤N≤12),John 打算在牧场上的某几格里种上美味的草。遗憾的是,有些土地相当贫瘠,不能用来种草。并且,John 不会......
  • UML建模语言、设计原则、设计模式
    1、UML统一建模语言定义:用于软件系统设计与分析的语言工具目的:帮助开发人员更好的梳理逻辑、思路学习地址:UML概述_w3cschool官网:https://www.omg.org/spec/UML1.1......
  • history模式下页面刷新404问题
      最近在完成实验室oj项目部署时,发现了一个有趣的现象:可以正常进入项目,导航栏上各个组件间也可以正常跳转,但点击页面刷新按钮后,就离奇的出现了404。1、问题分析  ......
  • 23种设计模式-原型设计模式介绍加实战
    1、描述用原型实例指定创建对象的种类,并且通过拷贝这些原型对象的属性来创建新的对象。通俗点的意思就是一个对象无需知道任何创建细节就可以创建出另外一个可定制的对象......
  • 【Dokcer】docker的网络模式
    Docker的四种网络模式:bridge(默认网络)hostnonecontainer自定义网络一、bridge模式bridge网络模式是docker的默认网络模式当docker进程启动的时候,会在主机上自动创建一个名为d......
  • Unity中的常见单例模式
    在Unity中我们用到的最多的设计模式之一就是单例模式单例模式顾名思义就是只允许单个此实例物体存在因此单例类通常挂载在各种Manager物体上下面介绍几种常用单例模式的......
  • 常见的设计模式
    单例模式:单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在......
  • 13第五章:【01】单例模式
    一、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只能提供一个取得其对象实例的方法(静态方法)。......