Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <iostream>
  2. #define LINUX
  3.  
  4. using namespace std;
  5.  
  6. /**
  7.  * Абстрактный базовый класс для продукта.
  8.  */
  9. class Widget {
  10.  public:
  11.   virtual void draw() = 0;
  12. };
  13.  
  14. /**
  15.  * Семество конкретных продуктов номер 1
  16.  */
  17. class LinuxButton : public Widget {
  18.  public:
  19.   void draw() { cout << "LinuxButton\n"; }
  20. };
  21. class LinuxMenu : public Widget {
  22.  public:
  23.   void draw() { cout << "LinuxMenu\n"; }
  24. };
  25.  
  26. /**
  27.  * Семество конкретных продуктов номер 2
  28.  */
  29. class WindowsButton : public Widget {
  30.  public:
  31.   void draw() { cout << "WindowsButton\n"; }
  32. };
  33. class WindowsMenu : public Widget {
  34.  public:
  35.   void draw() { cout << "WindowsMenu\n"; }
  36. };
  37.  
  38. /**
  39.  *
  40.  * Клиент, который использует продукты обеих семейств
  41.  *
  42.  */
  43. class Client {
  44.  public:
  45.   void draw() {
  46. #ifdef LINUX
  47.     Widget *w = new LinuxButton;
  48. #else // WINDOWS
  49.     Widget *w = new WindowsButton;
  50. #endif
  51.     w->draw();
  52.     display_window_one();
  53.     display_window_two();
  54.   }
  55.  
  56.   void display_window_one() {
  57. #ifdef LINUX
  58.     Widget *w[] = {
  59.         new LinuxButton,
  60.         new LinuxMenu
  61.     };
  62. #else // WINDOWS
  63.     Widget *w[] = {
  64.         new WindowsButton,
  65.         new WindowsMenu
  66.     };
  67. #endif
  68.     w[0]->draw();
  69.     w[1]->draw();
  70.   }
  71.  
  72.   void display_window_two() {
  73. #ifdef LINUX
  74.     Widget *w[] = {
  75.         new LinuxMenu,
  76.         new LinuxButton
  77.     };
  78. #else // WINDOWS
  79.     Widget *w[] = {
  80.         new WindowsMenu,
  81.         new WindowsButton
  82.     };
  83. #endif
  84.     w[0]->draw();
  85.     w[1]->draw();
  86.   }
  87. };
  88.  
  89. int main() {
  90.   Client *c = new Client();
  91.   c->draw();
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement