两个方向互不干扰。corp和Product是业务功能,HouseCorp, ShanZhaiCorp,House,IPod是平台实现。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//抽象总产品类
class Product {
public:
virtual void beProducted() = 0;
virtual void beselled() = 0;
virtual ~Product() {};
};
//房子类(继承产品类)
class House :public Product {
public:
void beProducted() { cout << "生产出来的房子是这样的" << endl; }
void beselled() { cout << "生产出来的房子卖出去了" << endl; }
};
//Ipod类(继承产品类)
class IPod :public Product {
void beProducted() { cout << "生产出来的IPod是这样的" << endl; }
void beselled() { cout << "生产出来的IPod卖出去了" << endl; }
};
//公司基类。公司和产品之间建立联系
class Corp {
private:
//组合的方式 公司和产品之间建立联系
Product* product;
public:
Corp(Product* product) :product(product) {};
virtual void makeMoney() {
product->beProducted();
product->beselled();
}
};
//山寨产品生产商
class ShanZhaiCrop :public Corp {
public:
ShanZhaiCrop(Product* product) :Corp(product) {}
void makeMoney() {
Corp::makeMoney();
cout << "我赚大钱呀" << endl;
}
};
//房地产商
class HouseCorp :public Corp {
public:
HouseCorp(House* house) :Corp(house) {}
void makeMoney(){
Corp::makeMoney();
cout << "房地产公司赚大钱了" << endl;
}
};
int main()
{
House * house = new House();
cout << "房地产公司是这样运行的" << endl;
HouseCorp * housecorp = new HouseCorp(house);
housecorp->makeMoney();
cout << "山寨公司是这样运行的" << endl;
//山寨产品多种多样,现在制定生产ipod
ShanZhaiCrop * shanzhaicrop = new ShanZhaiCrop(new IPod());
shanzhaicrop->makeMoney();
return 0;
/*
房地产公司是这样运行的
生产出来的房子是这样的
生产出来的房子卖出去了
房地产公司赚大钱了
山寨公司是这样运行的
生产出来的IPod是这样的
生产出来的IPod卖出去了
我赚大钱呀
*/
}