职责链模式
java
//Order.java
package shiyan15;
/**
* @Description:采购单类
* @author 张紫诺
*
*/
public class Order {
private double money;
public double getMoney(){
return money;
}
public void setMoney(double a){
money=a;
}
}
//Leader.java
package shiyan15;
/**
* @Description:抽象处理者
* @author 张紫诺
*
*/
public abstract class Leader {
protected String name;
protected Leader successor;
public Leader(String a){name=a;}
public void setSuccessor(Leader a){
successor=a;
}
public Leader(String a,Leader b){
name=a;
successor=b;
}
    
public abstract void approvel(Order dan);
}
//Zhuren.java
package shiyan15;
/**
* @Description:具体处理者:主任类
* @author 张紫诺
*
*/
public class Zhuren extends Leader{
public Zhuren(String a) {
super(a);
}
public Zhuren(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=10000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批1万元以上的采购单");
this.successor.approvel(dan);
}
}
}
//Fuzong.java
package shiyan15;
/**
* @Description:具体处理者:副总经理类
* @author 张紫诺
*
*/
public class Fuzong extends Leader{
public Fuzong(String a) {
super(a);
}
public Fuzong(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=100000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批10万元以上的采购单");
this.successor.approvel(dan);
}
}
}
//Zong.java
package shiyan15;
/**
* @Description:具体处理者:总经理类
* @author 张紫诺
*
*/
public class Zong extends Leader{
public Zong(String a) {
super(a);
}
public Zong(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=200000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批20万元以上的采购单");
System.out.println("这个"+dan.getMoney()+"元的采购单"+"需要职工大会确定");
}
}
}
//Bumen.java
package shiyan15;
/**
* @Description:具体处理者:部门经理类
* @author 张紫诺
*
*/
public class Bumen extends Leader{
public Bumen(String a) {
super(a);
}
public Bumen(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=50000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批5万元以上的采购单");
this.successor.approvel(dan);
}
}
}
//Client.java
package shiyan15;
public class Client {
public static void main(String[] args) {
Leader zhuren,bumen,fuzong,zong;
Order danzi=new Order();
zong=new Zong("总经理");
fuzong=new Fuzong("副总经理",zong);
bumen=new Bumen("部门经理",fuzong);
zhuren=new Zhuren("主任",bumen);
danzi.setMoney(5000);
zhuren.approvel(danzi);
System.out.println("--------—----------------------------");
danzi.setMoney(50000);
zhuren.approvel(danzi);
System.out.println("--------—----------------------------");
danzi.setMoney(1000000);
zhuren.approvel(danzi);
        
}
}
c++
#include<iostream>
using namespace std;
#include<string>
//抽象管理者
class Manager
{
protected:
Manager *m_manager;
string m_name;
public:
Manager(Manager *manager, string name) :m_manager(manager), m_name(name){}
virtual void DealWithRequest(string name, int num) {}
};
//主任
class Zhuren : public Manager
{
public:
Zhuren(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 10000)
{
cout << "主任" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "主任" << m_name << "无法处理,交由部门经理处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
//部门经理
class Bumen : public Manager
{
public:
Bumen(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 50000)
{
cout << "部门经理" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "部门经理" << m_name << "无法处理,交由副总经理处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
//副总经理
class Fuzong : public Manager
{
public:
Fuzong(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 100000)
{
cout << "副总经理" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "副总经理" << m_name << "无法处理,交由总经理处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
//总经理
class Zong : public Manager
{
public:
Zong(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 200000)
{
cout << "总经理" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "总经理" << m_name << "无法处理,召开职工大会处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
class Congress : public Manager
{
public:
Congress(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
cout << "职工大会" << m_name << "审批采购单:" << name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
};
//主函数
int main()
{
//设置上级
Manager *congress = new Congress(NULL, "");
Manager *zong = new Zong(congress, "赵六");
Manager *fuzong = new Fuzong(zong, "王五");
Manager *bumen = new Bumen(fuzong, "李四");
Manager *zhuren = new Zhuren(bumen, "张三");
zhuren->DealWithRequest("001", 5000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("002", 10000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("003", 60000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("004", 110000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("005", 300000);
cout<<"-----------------------------------------"<<endl;
delete zhuren;
delete bumen;
delete fuzong;
delete zong;
delete congress;
system("pause");
return 0;
}
//Order.java
package shiyan15;
/**
* @Description:采购单类
* @author 张紫诺
*
*/
public class Order {
private double money;
public double getMoney(){
return money;
}
public void setMoney(double a){
money=a;
}
}
//Leader.java
package shiyan15;
/**
* @Description:抽象处理者
* @author 张紫诺
*
*/
public abstract class Leader {
protected String name;
protected Leader successor;
public Leader(String a){name=a;}
public void setSuccessor(Leader a){
successor=a;
}
public Leader(String a,Leader b){
name=a;
successor=b;
}
public abstract void approvel(Order dan);
}
//Zhuren.java
package shiyan15;
/**
* @Description:具体处理者:主任类
* @author 张紫诺
*
*/
public class Zhuren extends Leader{
public Zhuren(String a) {
super(a);
}
public Zhuren(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=10000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批1万元以上的采购单");
this.successor.approvel(dan);
}
}
}
//Fuzong.java
package shiyan15;
/**
* @Description:具体处理者:副总经理类
* @author 张紫诺
*
*/
public class Fuzong extends Leader{
public Fuzong(String a) {
super(a);
}
public Fuzong(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=100000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批10万元以上的采购单");
this.successor.approvel(dan);
}
}
}
//Zong.java
package shiyan15;
/**
* @Description:具体处理者:总经理类
* @author 张紫诺
*
*/
public class Zong extends Leader{
public Zong(String a) {
super(a);
}
public Zong(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=200000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批20万元以上的采购单");
System.out.println("这个"+dan.getMoney()+"元的采购单"+"需要职工大会确定");
}
}
}
//Bumen.java
package shiyan15;
/**
* @Description:具体处理者:部门经理类
* @author 张紫诺
*
*/
public class Bumen extends Leader{
public Bumen(String a) {
super(a);
}
public Bumen(String a,Leader b){
super(a,b);
}
public void approvel(Order dan) {
if(dan.getMoney()<=50000){
System.out.println(name+"同意审批这个"+dan.getMoney()+"元的采购单");
}else {
System.out.println(name+"不能审批5万元以上的采购单");
this.successor.approvel(dan);
}
}
}
//Client.java
package shiyan15;
public class Client {
public static void main(String[] args) {
Leader zhuren,bumen,fuzong,zong;
Order danzi=new Order();
zong=new Zong("总经理");
fuzong=new Fuzong("副总经理",zong);
bumen=new Bumen("部门经理",fuzong);
zhuren=new Zhuren("主任",bumen);
danzi.setMoney(5000);
zhuren.approvel(danzi);
System.out.println("--------—----------------------------");
danzi.setMoney(50000);
zhuren.approvel(danzi);
System.out.println("--------—----------------------------");
danzi.setMoney(1000000);
zhuren.approvel(danzi);
}
}
c++
#include<iostream>
using namespace std;
#include<string>
//抽象管理者
class Manager
{
protected:
Manager *m_manager;
string m_name;
public:
Manager(Manager *manager, string name) :m_manager(manager), m_name(name){}
virtual void DealWithRequest(string name, int num) {}
};
//主任
class Zhuren : public Manager
{
public:
Zhuren(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 10000)
{
cout << "主任" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "主任" << m_name << "无法处理,交由部门经理处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
//部门经理
class Bumen : public Manager
{
public:
Bumen(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 50000)
{
cout << "部门经理" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "部门经理" << m_name << "无法处理,交由副总经理处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
//副总经理
class Fuzong : public Manager
{
public:
Fuzong(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 100000)
{
cout << "副总经理" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "副总经理" << m_name << "无法处理,交由总经理处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
//总经理
class Zong : public Manager
{
public:
Zong(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
if (num < 200000)
{
cout << "总经理" << m_name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
else
{
cout << "总经理" << m_name << "无法处理,召开职工大会处理" << endl;
m_manager->DealWithRequest(name, num);
}
}
};
class Congress : public Manager
{
public:
Congress(Manager *manager, string name) :Manager(manager, name) {}
void DealWithRequest(string name, int num)
{
cout << "职工大会" << m_name << "审批采购单:" << name << "同意审批编号为"<<name<<"金额为"<<num<<"元的采购单"<<endl;
}
};
//主函数
int main()
{
//设置上级
Manager *congress = new Congress(NULL, "");
Manager *zong = new Zong(congress, "赵六");
Manager *fuzong = new Fuzong(zong, "王五");
Manager *bumen = new Bumen(fuzong, "李四");
Manager *zhuren = new Zhuren(bumen, "张三");
zhuren->DealWithRequest("001", 5000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("002", 10000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("003", 60000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("004", 110000);
cout<<"-----------------------------------------"<<endl;
zhuren->DealWithRequest("005", 300000);
cout<<"-----------------------------------------"<<endl;
delete zhuren;
delete bumen;
delete fuzong;
delete zong;
delete congress;
system("pause");
return 0;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号