Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define LINUX
- using namespace std;
- /**
- * Абстрактный базовый класс для продукта.
- */
- class Widget {
- public:
- virtual void draw() = 0;
- };
- /**
- * Семество конкретных продуктов номер 1
- */
- class LinuxButton : public Widget {
- public:
- void draw() { cout << "LinuxButton\n"; }
- };
- class LinuxMenu : public Widget {
- public:
- void draw() { cout << "LinuxMenu\n"; }
- };
- /**
- * Семество конкретных продуктов номер 2
- */
- class WindowsButton : public Widget {
- public:
- void draw() { cout << "WindowsButton\n"; }
- };
- class WindowsMenu : public Widget {
- public:
- void draw() { cout << "WindowsMenu\n"; }
- };
- /**
- *
- * Клиент, который использует продукты обеих семейств
- *
- */
- class Client {
- public:
- void draw() {
- #ifdef LINUX
- Widget *w = new LinuxButton;
- #else // WINDOWS
- Widget *w = new WindowsButton;
- #endif
- w->draw();
- display_window_one();
- display_window_two();
- }
- void display_window_one() {
- #ifdef LINUX
- Widget *w[] = {
- new LinuxButton,
- new LinuxMenu
- };
- #else // WINDOWS
- Widget *w[] = {
- new WindowsButton,
- new WindowsMenu
- };
- #endif
- w[0]->draw();
- w[1]->draw();
- }
- void display_window_two() {
- #ifdef LINUX
- Widget *w[] = {
- new LinuxMenu,
- new LinuxButton
- };
- #else // WINDOWS
- Widget *w[] = {
- new WindowsMenu,
- new WindowsButton
- };
- #endif
- w[0]->draw();
- w[1]->draw();
- }
- };
- int main() {
- Client *c = new Client();
- c->draw();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement