抽象工厂模式(c++)
#include<iostream> using namespace std; //苹果抽象类 class AbstractApple { public: virtual void ShowName() = 0; }; //中国苹果 class ChinaApple :public AbstractApple { public: void ShowName() override{ cout << "中国苹果" << endl; } }; class USAApple :public AbstractApple { public: void ShowName() override { cout << "美国苹果" << endl; } }; //抽象香蕉 class AbstractBanana { public: virtual void ShowName() = 0; }; class ChinaBanana :public AbstractBanana { public: void ShowName() override { cout << "中国香蕉" << endl; } }; class USABanana :public AbstractBanana { public: void ShowName() override { cout << "美国香蕉" << endl; } }; //抽象鸭梨 class AbstractPear { public: virtual void ShowName() = 0; }; class ChinaPear :public AbstractPear { public: void ShowName() override { cout << "中国鸭梨" << endl; } }; class USAPear :public AbstractPear { public: void ShowName() override { cout << "美国鸭梨" << endl; } }; //抽象工厂 针对产品族 class AbstractFactory { public: virtual AbstractApple* CreateApple() = 0; virtual AbstractBanana* CreateBanana() = 0; virtual AbstractPear* CreatePear() = 0; }; class ChinaFactory :public AbstractFactory { public: virtual AbstractApple* CreateApple() { return new ChinaApple; } virtual AbstractBanana* CreateBanana() { return new ChinaBanana; } virtual AbstractPear* CreatePear() { return new ChinaPear; } }; class USAFactory :public AbstractFactory { public: virtual AbstractApple* CreateApple() { return new USAApple; } virtual AbstractBanana* CreateBanana() { return new USABanana; } virtual AbstractPear* CreatePear() { return new USAPear; } }; void test() { AbstractFactory* factory; AbstractApple* apple; AbstractBanana* banana; AbstractPear* Pear; factory = new ChinaFactory; apple = factory->CreateApple(); apple->ShowName(); banana = factory->CreateBanana(); banana->ShowName(); Pear = factory->CreatePear(); Pear->ShowName(); delete factory; delete apple; delete banana; delete Pear; } int main() { test(); cin.get(); return 0; }