Advertisement
CruelSysOP

C++ Fabric

Nov 12th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. // #include <iostream>
  2. #include <vector>
  3.  
  4. enum Warrior_ID { Infantryman_ID=0, Archer_ID, Horseman_ID };
  5.  
  6. // Иерархия классов игровых персонажей
  7. class Warrior
  8. {
  9.   public:
  10.     virtual void info() = 0;    
  11.     virtual ~Warrior() {}
  12.     // Параметризированный статический фабричный метод
  13.     static Warrior* createWarrior( Warrior_ID id );
  14. };
  15.  
  16. class Infantryman: public Warrior
  17. {
  18.   public:
  19.     void info() {
  20.       cout << "Infantryman" << endl;
  21.     }
  22. };
  23.  
  24. class Archer: public Warrior
  25. {
  26.   public:
  27.     void info() {
  28.       cout << "Archer" << endl;
  29.     }
  30. };
  31.  
  32. class Horseman: public Warrior
  33. {
  34.   public:    
  35.     void info() {
  36.       cout << "Horseman" << endl;
  37.     }
  38. };
  39.  
  40.  
  41. // Реализация параметризированного фабричного метода
  42. Warrior* Warrior::createWarrior( Warrior_ID id )
  43. {
  44.     Warrior * p;
  45.     switch (id)
  46.     {
  47.         case Infantryman_ID:
  48.             p = new Infantryman();          
  49.             break;      
  50.         case Archer_ID:
  51.             p = new Archer();          
  52.             break;
  53.         case Horseman_ID:
  54.             p = new Horseman();          
  55.             break;              
  56.         default:
  57.             assert( false);
  58.     }
  59.     return p;
  60. };
  61.  
  62.  
  63. // Создание объектов при помощи параметризированного фабричного метода
  64. int main()
  65. {    
  66.     vector<Warrior*> v;
  67.     v.push_back( Warrior::createWarrior( Infantryman_ID));
  68.     v.push_back( Warrior::createWarrior( Archer_ID));
  69.     v.push_back( Warrior::createWarrior( Horseman_ID));
  70.  
  71.     for(int i=0; i<v.size(); i++)
  72.         v[i]->info();
  73.     // ...
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement