Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Паттерн Builder - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сравнение строк http://www.cyberforum.ru/cpp-beginners/thread857633.html
Не прибегая к функциям сравнения строк, создайте программу, которая запрашивает у пользователя две строки и производит их сравнение, возвращая 0 , если строки равны,, +1, если первая строка больше...
C++ Массивы. С++ Builder. Вычислить среднее арифметическое элементов матрицы, расположенных на главной диагонали Помогите пожалуйста решить данную задачу...) Вычислить среднее арифметическое элементов матрицы, расположенных на главной диагонали. Вывести элементы, расположенные на главной диагонали. http://www.cyberforum.ru/cpp-beginners/thread857631.html
C++ Массивы и функции
Здравствуйте. Очень интересная ошибка возникает в результате работы этого когда: void schet(double result, int ar_size); int main() { using namespace std; double * result = new double; int i...
C++ класс, реализующий линейный односвязный список
Разработайте класс, реализующий линейный односвязный список. Методы класса: вставка элемента после n-го элемента списка, просмотр списка, удаление из списка каждого второго элемента. Поля записей:...
C++ Задача на рекурсию. Найти кратчайшее расстояние между городами i и j даже если между ними нет прямой дороги http://www.cyberforum.ru/cpp-beginners/thread857582.html
Дана матрица размером NxN с расстояниями между городами при наличии прямой дороги между ними. По вертикали содержаться города откуда выезжаем, по горизонтали – куда. На пересечении - расстояние по...
C++ Найти ошибку в коде Скажите, пожалуйста, в чем у меня ошибка? Вот код #include <iostream> #include <cmath> #include <locale> #include <conio.h> const float PI = 3.141592; /*class Error{ подробнее

Показать сообщение отдельно
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47

Паттерн Builder - C++

06.05.2013, 19:00. Просмотров 716. Ответов 6
Метки (Все метки)

Вот у меня есть код примера реализации паттерна Builder(другие примеры не предлагать). В классе Army надо как-то исправить код так, чтобы если вдруг в продукте нет одного поля, то и его не должно быть в функции info(). Спасибо заранее за советы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
  
// Классы всех возможных родов войск
class Infantryman
{
  public:
    void info() { 
      cout << "Infantryman" << endl; 
    }
};
  
class Archer
{
  public:
    void info() { 
      cout << "Archer" << endl; 
    }
};
  
class Horseman
{
  public:        
    void info() { 
      cout << "Horseman" << endl; 
    }
};
  
class Catapult
{
  public:    
    void info() { 
      cout << "Catapult" << endl; 
    }
};
  
class Elephant
{
  public:    
    void info() { 
      cout << "Elephant" << endl; 
    }
};
  
  
// Класс "Армия", содержащий все типы боевых единиц
class Army 
{
  public:
    vector<Infantryman> vi; 
    vector<Archer>      va; 
    vector<Horseman>    vh;     
    vector<Catapult>    vc;     
    vector<Elephant>    ve; 
    void info() {   
      int i;
      for(i=0; i<vi.size(); ++i)  vi[i].info();
      for(i=0; i<va.size(); ++i)  va[i].info();
      for(i=0; i<vh.size(); ++i)  vh[i].info();
      for(i=0; i<vc.size(); ++i)  vc[i].info();
      for(i=0; i<ve.size(); ++i)  ve[i].info();
    }
};
  
  
// Базовый класс ArmyBuilder объявляет интерфейс для поэтапного 
// построения армии и предусматривает его реализацию по умолчанию
 
class ArmyBuilder
{
  protected: 
    Army* p;
  public:    
    ArmyBuilder(): p(0) {}
    virtual ~ArmyBuilder() {}
    virtual void createArmy() {}
    virtual void buildInfantryman() {}
    virtual void buildArcher() {}
    virtual void buildHorseman() {}
    virtual void buildCatapult() {}
    virtual void buildElephant() {}    
    virtual Army* getArmy() { return p; }    
};
  
  
// Римская армия имеет все типы боевых единиц кроме боевых слонов
class RomanArmyBuilder: public ArmyBuilder
{    
  public:    
    void createArmy() { p = new Army; }
    void buildInfantryman() { p->vi.push_back( Infantryman()); }
    void buildArcher() { p->va.push_back( Archer()); }
    void buildHorseman() { p->vh.push_back( Horseman()); }    
    void buildCatapult() { p->vc.push_back( Catapult()); }
};
  
  
// Армия Карфагена имеет все типы боевых единиц кроме катапульт
class CarthaginianArmyBuilder: public ArmyBuilder
{    
  public:    
    void createArmy() { p = new Army; }
    void buildInfantryman() { p->vi.push_back( Infantryman()); }
    void buildArcher() { p->va.push_back( Archer()); }
    void buildHorseman() { p->vh.push_back( Horseman()); }
    void buildElephant() { p->ve.push_back( Elephant()); }    
};
  
  
// Класс-распорядитель, поэтапно создающий армию той или иной стороны.
// Именно здесь определен алгоритм построения армии.
class Director
{    
  public:    
    Army* createArmy( ArmyBuilder & builder ) 
    { 
        builder.createArmy();
        builder.buildInfantryman();
        builder.buildArcher();
        builder.buildHorseman();
        builder.buildCatapult();
        builder.buildElephant();
        return( builder.getArmy());
    }
};
  
  
int main()
{   
    Director dir;
    RomanArmyBuilder ra_builder;
    CarthaginianArmyBuilder ca_builder;
     
    Army * ra = dir.createArmy( ra_builder);
    Army * ca = dir.createArmy( ca_builder);
    cout << "Roman army:" << endl;
    ra->info();
    cout << "\nCarthaginian army:" << endl;
    ca->info();
    // ...
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru