Advertisement
kirill1920

march_12

Mar 12th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include<iostream>
  2. #include<cassert>
  3. #include<string>
  4. #include<vector>
  5. using namespace std;
  6. class Archer {
  7. public:
  8.     void info() {
  9.         cout << "Archer\n";
  10.  
  11.     }
  12. };
  13. class Swordman {
  14. public:
  15.     void info() {
  16.         cout << "Swordman\n";
  17.     }
  18. };
  19. class Wear {
  20. public:
  21.     void info() {
  22.         cout << "Wear\n";
  23.     }
  24. };
  25. class Army {
  26. public:
  27.     vector <Archer> va;
  28.     vector <Swordman> vs;
  29.     vector <Wear> vw;
  30.     void info() {
  31.         for (auto& s: va) {
  32.             s.info();
  33.         }
  34.        
  35.         for (auto& t: vs) {
  36.             t.info();
  37.         }
  38.         for (auto& w : vw) {
  39.              w.info();
  40.         }
  41.     }
  42. };
  43. class ArmyBuilder {
  44. protected:
  45.     Army* p;
  46. public:
  47.     ArmyBuilder() :p(0) {};
  48.     virtual void createArmy() {};
  49.     virtual void buildArcher() {};
  50.     virtual void buildSwordMan() {};
  51.     virtual void buildWear() {};
  52.     virtual Army* getArmy() {
  53.         return p;
  54.     };
  55.  
  56. };
  57. class RomanArmyBuilder :public
  58.     ArmyBuilder {
  59. public:
  60.     void createArmy() {
  61.         p = new Army;
  62.     }
  63.     void buildArcher() {
  64.         p->va.push_back(Archer());
  65.        
  66.     }
  67.     void buildSwordMan() {
  68.         p->vs.push_back(Swordman());
  69.     }
  70.     void buildWear() {
  71.         p->vw.push_back(Wear());
  72.     }
  73.    
  74. };
  75. class SpainArmyBuilder :public
  76.     ArmyBuilder {
  77. public:
  78.     void createArmy() {
  79.         p = new Army;
  80.     }
  81.     void buildArcher() {
  82.         p->va.push_back(Archer());
  83.  
  84.     }
  85.     void buildSwordMan() {
  86.         p->vs.push_back(Swordman());
  87.     }
  88.     void buildWear() {
  89.         p->vw.push_back(Wear());
  90.     }
  91.  
  92. };
  93. class Director {
  94. public:
  95.     Army* createArmy(ArmyBuilder& builder)
  96.     {
  97.         builder.createArmy();
  98.         builder.buildArcher();
  99.         builder.buildSwordMan();
  100.         builder.buildWear();
  101.         return (builder.getArmy());
  102.  
  103.  
  104.     }
  105. };
  106. int main() {
  107.     Director dir;
  108.     RomanArmyBuilder rb;
  109.     Army* ra = dir.createArmy(rb);
  110.     ra->info();
  111.     SpainArmyBuilder sb;
  112.     Army* sa = dir.createArmy(sb);
  113.     sa->info();
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement