int main() { LinuxFactory* linuxFactory = new (LinuxFactory); IFactory* ifactory = &linuxFactory->ifactory; IWidget* iwidget = ifactory->createWidget(ifactory); iwidget->show(iwidget); IButton* ibutton = ifactory->createButton(ifactory); ibutton->click(ibutton); delete (LinuxWidget, container_of(iwidget, LinuxWidget, iwidget)); delete (LinuxButton, container_of(ibutton, LinuxButton, ibutton)); MacFactory* macFactory = new (MacFactory); ifactory = &macFactory->ifactory; iwidget = ifactory->createWidget(ifactory); iwidget->show(iwidget); ibutton = ifactory->createButton(ifactory); ibutton->click(ibutton); delete (MacWidget, container_of(iwidget, MacWidget, iwidget)); delete (MacButton, container_of(ibutton, MacButton, ibutton)); WindowsFactory* windowsFactory = new (WindowsFactory); ifactory = &windowsFactory->ifactory; iwidget = ifactory->createWidget(ifactory); iwidget->show(iwidget); ibutton = ifactory->createButton(ifactory); ibutton->click(ibutton); delete (WindowsWidget, container_of(iwidget, WindowsWidget, iwidget)); delete (WindowsButton, container_of(ibutton, WindowsButton, ibutton)); delete (LinuxFactory, linuxFactory); delete (MacFactory, macFactory); delete (WindowsFactory, windowsFactory); return 0; }
int main(int argc, char* argv[]) { // 스타일을 묶어서 한번에 선택 IFactory* factory; if (strcmp(argv[1], "--style=GTK")) factory = new GTKFactory; else if (strcmp(argv[1], "--style=XP")) factory = new XPFactory; // 이제 진짜 객체 생성 IButton* p1 = factory->createButton(); IEdit* p2 = factory->createEdit(); //... }