#include <iostream> using namespace std; class Fruit { public: virtual void SayName() = 0; }; class AbstractFactory { public: virtual Fruit * CreateBanana() = 0; virtual Fruit * CreateApple() = 0; }; class NorthBanana :public Fruit { public: virtual void SayName() { cout << "我是北方香蕉" << endl; } }; class NorthApple:public Fruit { public: virtual void SayName() { cout << "我是北方苹果。。" << endl; } }; class SourthBanana :public Fruit { public: virtual void SayName() { cout << "我是南方香蕉。。" << endl; } }; class SourthApple :public Fruit { public: virtual void SayName() { cout << "我是南方苹果。。" << endl; } }; class NorthFactory : public AbstractFactory { public: Fruit * CreateBanana() { return new NorthApple(); } Fruit * CreateApple() { return new NorthApple(); } }; class SourthFactory : public AbstractFactory { public: Fruit * CreateBanana() { return new SourthApple(); } Fruit * CreateApple() { return new SourthApple(); } }; int main() { AbstractFactory *af = new NorthFactory(); Fruit * bananan = af->CreateBanana(); bananan->SayName(); Fruit * apple = af->CreateApple(); apple->SayName(); AbstractFactory *af2 = new SourthFactory(); Fruit * bananan2 = af2->CreateBanana(); bananan2->SayName(); Fruit * apple2 = af2->CreateApple(); apple2->SayName(); return 0; }