职责链模式

 

 

1.JAVA

 

package ChainOfResponsibility;

public class PurchaseRequest {
    private String purchaseName;
    private int purchaseNum;
    public PurchaseRequest(String purchaseName,int purchaseNum){
        this.purchaseName=purchaseName;
        this.purchaseNum=purchaseNum;
    }

    public int getPurchaseNum() {
        return purchaseNum;
    }

    public void setPurchaseName(String purchaseName) {
        this.purchaseName = purchaseName;
    }

    public String getPurchaseName() {
        return purchaseName;
    }

    public void setPurchaseNum(int purchaseNum) {
        this.purchaseNum = purchaseNum;
    }
}

package ChainOfResponsibility;

public abstract class Leader {
    protected String name;
    protected Leader successor;
    public Leader(String name){
        this.name=name;
    }
    public void setSuccessor(Leader successor){
        this.successor=successor;
    }
    public abstract void handleRequest(PurchaseRequest request);
}
package ChainOfResponsibility;

public class Director extends Leader{
    public Director(String name){
        super(name);
    }
    public void handleRequest(PurchaseRequest requset){
        if(requset.getPurchaseNum()<=10000){
            System.out.println("主任"+name+"审批"+requset.getPurchaseName()+""+requset.getPurchaseNum()+"元采购单");
        }else{
            if(this.successor!=null){
                this.successor.handleRequest(requset);
            }
        }
    }

}
package ChainOfResponsibility;

public class Manager extends Leader{
    public Manager(String name){
        super(name);
    }
    public void handleRequest(PurchaseRequest requset){
        if(requset.getPurchaseNum()<=50000){
            System.out.println("部门经理"+name+"审批"+requset.getPurchaseName()+""+requset.getPurchaseNum()+"元采购单");
        }else{
            if(this.successor!=null){
                this.successor.handleRequest(requset);
            }
        }
    }
}
package ChainOfResponsibility;

public class smallGeneralManager extends Leader{
    public smallGeneralManager(String name){
        super(name);
    }
    public void handleRequest(PurchaseRequest requset){
        if(requset.getPurchaseNum()<=100000){
            System.out.println("副总经理"+name+"审批"+requset.getPurchaseName()+""+requset.getPurchaseNum()+"元采购单");
        }else{
            if(this.successor!=null){
                this.successor.handleRequest(requset);
            }
        }
    }
}
package ChainOfResponsibility;

public class GeneralManager extends Leader{
    public GeneralManager(String name){
        super(name);
    }
    public void handleRequest(PurchaseRequest requset){
        if(requset.getPurchaseNum()<=200000){
            System.out.println("总经理"+name+"审批"+requset.getPurchaseName()+""+requset.getPurchaseNum()+"元采购单");
        }else{
            if(this.successor!=null){
                this.successor.handleRequest(requset);
            }
        }
    }
}
package ChainOfResponsibility;

public class Workers extends Leader{
    public Workers(String name){
        super(name);
    }
    public void handleRequest(PurchaseRequest requset){
        if(requset.getPurchaseNum()>200000){
            System.out.println("经职工大会"+name+"审批"+requset.getPurchaseName()+""+requset.getPurchaseNum()+"元采购单");
        }else{
            if(this.successor!=null){
                this.successor.handleRequest(requset);
            }
        }
    }
}
package ChainOfResponsibility;

public class Client {
    public static void main(String arg[]){
        Leader objectDirector,objectManager,objectsmallGeneralManager,generalManger,workers;
        objectDirector=new Director("王明");
        objectManager=new Manager("赵强");
        objectsmallGeneralManager=new smallGeneralManager("李波");
        generalManger=new GeneralManager("张三");
        workers=new Workers("李四");

        objectDirector.setSuccessor(objectManager);
        objectManager.setSuccessor(objectsmallGeneralManager);
        objectsmallGeneralManager.setSuccessor(generalManger);
        generalManger.setSuccessor(workers);

        PurchaseRequest purchaseRequest1=new PurchaseRequest("小红",5000);
        objectDirector.handleRequest(purchaseRequest1);

        PurchaseRequest purchaseRequest2=new PurchaseRequest("小绿",40000);
        objectDirector.handleRequest(purchaseRequest2);

        PurchaseRequest purchaseRequest3=new PurchaseRequest("小黄",80000);
        objectDirector.handleRequest(purchaseRequest3);

        PurchaseRequest purchaseRequest4=new PurchaseRequest("小蓝",150000);
        objectDirector.handleRequest(purchaseRequest4);

        PurchaseRequest purchaseRequest5=new PurchaseRequest("小紫",250000);
        objectDirector.handleRequest(purchaseRequest5);

    }
}

2.C++

 

#include <iostream>

#include <list>

#include<algorithm>

#include<sstream>

using namespace std;

class PurchaseRequest

{

private:

    string purchaseName;

    int purchaseNum;

public:

    PurchaseRequest(string purchaseName, int purchaseNum)

    {

         this->purchaseName = purchaseName;

         this->purchaseNum = purchaseNum;

    }

    int getPurchaseNum()

    {

         return purchaseNum;

    }

    void setPurchaseName(string purchaseName)

    {

         this->purchaseName = purchaseName;

    }

    string getPurchaseName() {

         return purchaseName;

    }

    void setPurchaseNum(int purchaseNum) {

         this->purchaseNum = purchaseNum;

    }

};

class Leader

{

//C++中类中自身类的对象不能做自己的数据成员,但是做静态数据成员、引用类数据成员等可以

//不能使用抽象数据成员

protected:

    string name;

    Leader *successor;//使用指针,类的定义要知道类的空间分配大小

public:

    Leader(string name)

    {

         this->name = name;

    }

    Leader(Leader* leader, string name) :successor(leader), name(name) {}//:冒号,参数初始化

    virtual void handleRequest(PurchaseRequest request) = 0;

};

class Director: public Leader

{

public:

    Director(Leader* leader, string name): Leader(leader,name){}//子类调用父类的构造函数

    void handleRequest(PurchaseRequest requset)

    {

         int num = requset.getPurchaseNum();

         string num_str;

         stringstream sStream;

         sStream << num;

         sStream >> num_str;

         if (requset.getPurchaseNum() <= 10000) {

             cout << "主任" + name + "审批" + requset.getPurchaseName() + "," + num_str+ "元采购单" << endl;

         }

         else {

             successor->handleRequest(requset);//交由上级处理

         }

    }

};

class Manager :public Leader

{

public:

    Manager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数

    void handleRequest(PurchaseRequest requset)

    {

         int num = requset.getPurchaseNum();

         string num_str;

         stringstream sStream;

         sStream << num;

         sStream >> num_str;

         if (requset.getPurchaseNum() <= 50000) {

             cout << "部门经理" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;

         }

         else {

             successor->handleRequest(requset);//交由上级处理

         }

    }

};

class smallGeneralManager :public Leader

{

public:

    smallGeneralManager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数

    void handleRequest(PurchaseRequest requset)

    {

         int num = requset.getPurchaseNum();

         string num_str;

         stringstream sStream;

         sStream << num;

         sStream >> num_str;

         if (requset.getPurchaseNum() <= 100000) {

             cout << "副总经理" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;

         }

         else {

             successor->handleRequest(requset);//交由上级处理

         }

    }

};

class GeneralManager :public Leader

{

public:

    GeneralManager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数

    void handleRequest(PurchaseRequest requset)

    {

         int num = requset.getPurchaseNum();

         string num_str;

         stringstream sStream;

         sStream << num;

         sStream >> num_str;

         if (requset.getPurchaseNum() <= 200000) {

             cout << "总经理" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;

         }

         else {

             successor->handleRequest(requset);//交由上级处理

         }

    }

};

class Workers :public Leader

{

public:

    Workers(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数

    void handleRequest(PurchaseRequest requset)

    {

         int num = requset.getPurchaseNum();

         string num_str;

         stringstream sStream;

         sStream << num;

         sStream >> num_str;

         if (requset.getPurchaseNum() > 200000) {

             cout << "经职工大会" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;

         }

         else {

             successor->handleRequest(requset);//交由上级处理

         }

    }

};

int main()

{

    Leader* workers = new Workers(NULL, "第一次会议");

    Leader* generalManger = new GeneralManager(workers, "张三");

    Leader* objectsmallGeneralManager = new smallGeneralManager(generalManger, "李波");

    Leader* objectManager = new  Manager(objectsmallGeneralManager, "赵强");

    Leader* objectDirector = new Director(objectManager, "王明");

    PurchaseRequest purchaseRequest1("小红", 5000);

    PurchaseRequest purchaseRequest2("小绿", 40000);

    PurchaseRequest purchaseRequest3("小黄", 80000);

    PurchaseRequest purchaseRequest4("小蓝", 150000);

    PurchaseRequest purchaseRequest5("小紫", 250000);

    objectDirector->handleRequest(purchaseRequest1);

    objectDirector->handleRequest(purchaseRequest2);

    objectDirector->handleRequest(purchaseRequest3);

    objectDirector->handleRequest(purchaseRequest4);

    objectDirector->handleRequest(purchaseRequest5);

 

 

}

 

posted @ 2021-11-02 22:55  xjspyx  阅读(54)  评论(0)    收藏  举报