解释说明:
main(),客户
IProduct,产品接口
CHouse,房子
CIPod,ipod
CClothes,服装
CNewCorp,桥梁类,MakeMoney()是桥梁方法
CNewHouseCorp,只能生产房子,所以构造函数是CHouse*
CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*
说明:客户直接使用CNewHouseCorp和CShanZhaiCorp类,在main()函数里构造产品,然后传到这两个类里。这两个类的MakeMoney()函数,先调用基类的MakeMoney(),然后分别执行各自的逻辑。
注意:CNewCorp起到了桥梁的作用。可以分别增加产品和公司。
#include <iostream>
using namespace std;
//产品基类
class CProduct
{
public:
CProduct(){}
virtual ~CProduct(){}
virtual void BeProduct() = 0;
virtual void BeSelled() = 0;
};
//产品--房子
class CHouse :public CProduct
{
public:
CHouse(){}
~CHouse(){}
void BeProduct()
{
cout << "生产出的房子是这个样子的..." << endl;
}
void BeSelled()
{
cout << "生产出的房子卖出去了..." << endl;
}
};
//产品--衣服
class CClothes :public CProduct
{
public:
CClothes(){}
~CClothes(){}
void BeProduct()
{
cout << "生产出的衣服是这个样子的..." << endl;
}
void BeSelled()
{
cout << "生产出的衣服卖出去了..." << endl;
}
};
//产品--Ipad
class CIPod :public CProduct
{
public:
CIPod(){}
~CIPod(){}
void BeProduct()
{
cout << "生产出的ipod是这个样子的..." << endl;
}
void BeSelled()
{
cout << "生产出的ipod卖出去了..." << endl;
}
};
//桥梁类
class CNewCorp
{
public:
CNewCorp(CProduct* pproduct)
{
this->m_pProduct = pproduct;
}
virtual ~CNewCorp(){}
void MakeMoney()
{
//每个公司都是一样,先生产
this->m_pProduct->BeProduct();
//然后销售
this->m_pProduct->BeSelled();
}
private:
CProduct* m_pProduct;
};
//只生产房子的类,靠卖房子挣钱
class CNewHouseCorp :public CNewCorp
{
public:
CNewHouseCorp(CHouse* pHouse) :CNewCorp(pHouse){}
~CNewHouseCorp(){}
void MakeMoney()
{
this->CNewCorp::MakeMoney();
cout << "房地产公司赚大钱了..." << endl;
}
};
//靠生产山寨产品挣钱
class CShanZhaiCorp :public CNewCorp
{
public:
CShanZhaiCorp(CProduct* pproduct) :CNewCorp(pproduct){}
~CShanZhaiCorp(){}
void MakeMoney()
{
this->CNewCorp::MakeMoney();
cout << "我赚钱呀..." << endl;
}
};
void Run1()
{
cout << "----------房地产公司是这样运行的----------" << endl;
CHouse house;
CNewHouseCorp newHouseCorp(&house);
newHouseCorp.MakeMoney();
cout << endl;
cout << "----------山寨公司是这样运行的----------" << endl;
CClothes clothes;
CShanZhaiCorp shanzhaicorp(&clothes);
shanzhaicorp.MakeMoney();
cout << endl;
}
void Run2()
{
cout << "----------房地产公司是这样运行的----------" << endl;
CHouse house;
CNewHouseCorp newHouseCorp(&house);
newHouseCorp.MakeMoney();
cout << endl;
cout << "----------山寨公司是这样运行的----------" << endl;
CIPod ipod;
CShanZhaiCorp shanzhaicorp(&ipod);
shanzhaicorp.MakeMoney();
cout << endl;
}
int main()
{
//只有两家公司,一家是房地产公司,另一家公司是衣服赚钱就生产衣服
Run1();
//只有两家公司,一家是房地产公司,另一家公司是ipod赚钱就生产ipod
Run2();
return 0;
}