责任链
#include <iostream>
#include <vector>
using namespace std;
class relatives
{
public:
relatives(){}
virtual ~relatives(){}
virtual bool request(int)=0;
};
class Manage1 : public relatives
{
public:
Manage1(){}
virtual ~Manage1(){}
bool request(int num)
{
if (num<10000)
{
cout<<num<<"元订单主任给批准"<<endl;
return true;
}
else
{
cout<<num<<"元订单主任不给批准,找部门经理"<<endl;
return false;
}
}
};
class Manage2 : public relatives
{
public:
Manage2(){}
virtual ~Manage2(){}
bool request(int num)
{
if (num<50000)
{
cout<<num<<"元订单部门经理给批准"<<endl;
return true;
}
else
{
cout<<num<<"元订单部门经理不给批准,找副总经理"<<endl;
return false;
}
}
};
class Manage3 : public relatives
{
public:
Manage3(){}
virtual ~Manage3(){}
bool request(int num)
{
if (num<100000)
{
cout<<num<<"元副总经理给批准"<<endl;
return true;
}
else
{
cout<<num<<"元订单副总经理不给批准,找总经理"<<endl;
return false;
}
}
};
class Manage4 : public relatives
{
public:
Manage4(){}
virtual ~Manage4(){}
bool request(int num)
{
if (num<200000)
{
cout<<num<<"元总经理给批准"<<endl;
return true;
}
else
{
cout<<num<<"金额太大批不了"<<endl;
return false;
}
}
};
class buysomething
{
private:
vector<relatives*> p_vbuy;
public:
buysomething()
{
p_vbuy.push_back(new Manage1);
p_vbuy.push_back(new Manage2);
p_vbuy.push_back(new Manage3);
p_vbuy.push_back(new Manage4);
}
virtual ~buysomething()
{
p_vbuy.clear();
}
void request(int num)
{
bool flag=false;
for (vector<relatives*>::iterator it=p_vbuy.begin();it!=p_vbuy.end();it++)
{
flag=(*it)->request(num);
if (flag==true)
break;
}
}
};
int main()
{
buysomething *buy=new buysomething;
buy->request(260000);
delete buy;
system("pause");
return 0;
}