职责链模式

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

浙公网安备 33010602011771号