/*************************************************************************** 抽象工厂: 工厂方法只能生产单一的产品 对工厂再次进行抽象,一个工厂可以生产多个产品; 2(A,B)个产品,2(C,D)个工厂,那么产品就会出现,C 生产的A,B D生产的A,B从而对应4中产品 1.创建工厂,工厂可以生产多个产品 2.使用此接口去生产对应的产品,可以生产1个或者两个;比如:创建C工厂,那么我可以创建CA 或者CB具有选择性 相似性:抽象出接口,然后实现此接口 *****************************************************************************/ #include<iostream> using namespace std; class Fruit { public: virtual void sayname() = 0; }; class FruitFactory { public: virtual Fruit* getApple() = 0; virtual Fruit* getBanana() = 0; }; class SouthBanana : public Fruit { public: virtual void sayname() { cout << "South Banana " << endl; } }; class SouthApple : public Fruit { public: virtual void sayname() { cout << "South Apple " << endl; } }; class NorthBanana : public Fruit { public: virtual void sayname() { cout << "North Banana " << endl; } }; class NorthApple : public Fruit { public: virtual void sayname() { cout << "North Apple " << endl; } }; class SourthFruitFactory : public FruitFactory { public: virtual Fruit* getApple() { return new SouthApple(); } virtual Fruit* getBanana() { return new SouthBanana(); } }; class NorthFruitFactory : public FruitFactory { public: virtual Fruit* getApple() { return new NorthApple(); } virtual Fruit* getBanana() { return new NorthBanana(); } }; void main() { FruitFactory * ff = new SourthFruitFactory(); Fruit *fruit = ff->getApple(); fruit->sayname(); fruit = ff->getBanana(); fruit->sayname(); delete fruit; delete ff;
ff = new NorthFruitFactory(); fruit = ff->getApple(); fruit->sayname(); fruit = ff->getBanana(); fruit->sayname();
delete fruit; delete ff; system("pause"); }