#define win 0 #define mac 1 #include <iostream> using namespace std; class button { public: button(){} virtual ~button(){} virtual void showbutton()=0; }; class winbutton : public button { public: winbutton(){} virtual ~winbutton(){} void showbutton(){cout<<"win button"<<endl;} }; class macbutton : public button { public: macbutton(){} virtual ~macbutton(){} void showbutton(){cout<<"mac button"<<endl;} }; class text { public: text(){} virtual ~text(){} virtual void showtext()=0; }; class wintext : public text { public: wintext(){} virtual ~wintext(){} void showtext(){cout<<"win text"<<endl;} }; class mactext : public text { public: mactext(){} virtual ~mactext(){} void showtext(){cout<<"mac text"<<endl;} }; class abstractfactory { public: abstractfactory(){} virtual ~abstractfactory(){} virtual button *createbutton()=0; virtual text *createtext()=0; }; class winfactory : public abstractfactory { public: winfactory(){} virtual ~winfactory(){} button *createbutton(){return new winbutton;} text *createtext(){return new wintext;} }; class macfactory : public abstractfactory { public: macfactory(){} virtual ~macfactory(){} button *createbutton(){return new macbutton;} text *createtext(){return new mactext;} }; int main() { abstractfactory *fc=new winfactory; button *bt=fc->createbutton(); text *tx=fc->createtext(); bt->showbutton(); tx->showtext(); delete bt; delete tx; delete fc; fc=new macfactory; bt=fc->createbutton(); tx=fc->createtext(); bt->showbutton(); tx->showtext(); delete bt; delete tx; delete fc; system("pause"); return 0; }