|
1 | 1 | #include <iostream>
|
2 | 2 | #include <vector>
|
3 | 3 | #include "duck.h"
|
4 |
| -#include "realduck.h" |
5 |
| -#include "rubberduck.h" |
6 |
| -#include "woodenduck.h" |
7 |
| -#include "woodenstrategy.h" |
8 |
| -#include "realduckstrategy.h" |
9 |
| -#include "rubberstrategy.h" |
10 | 4 | #include "decorativeduck.h"
|
11 |
| - |
| 5 | +#include "abstractduckfactory.h" |
| 6 | +#include "duckfactory.h" |
| 7 | +#include "decorativeduckfactory.h" |
12 | 8 | using namespace std;
|
13 | 9 |
|
14 | 10 | int main()
|
15 | 11 | {
|
16 |
| - vector<DecorativeDuck*> ducks; |
| 12 | + vector<Duck*> decducks; |
| 13 | + vector <Duck*> normducks; |
| 14 | + AbstractDuckFactory* decDucksFactory = new DecorativeDuckFactory(); |
| 15 | + AbstractDuckFactory* normDucksFactory = new DuckFactory(); |
| 16 | + |
| 17 | + |
17 | 18 | for (int i = 0; i < 10; i++)
|
18 | 19 | {
|
19 | 20 | switch (i%3)
|
20 | 21 | {
|
21 | 22 | case 0:
|
22 |
| - ducks.push_back(new DecorativeDuck(new RealDuck(new RealDuckStrategy()))); |
| 23 | + decducks.push_back(decDucksFactory->createRealDuck()); |
| 24 | + normducks.push_back(normDucksFactory->createRealDuck()); |
23 | 25 | break;
|
24 | 26 | case 1:
|
25 |
| - ducks.push_back(new DecorativeDuck(new WoodenDuck(new WoodenStrategy()))); |
| 27 | + decducks.push_back(decDucksFactory->createWoodenDuck()); |
| 28 | + normducks.push_back(normDucksFactory->createWoodenDuck()); |
26 | 29 | break;
|
27 | 30 | case 2:
|
28 |
| - ducks.push_back(new DecorativeDuck(new RubberDuck(new RubberStrategy()))); |
| 31 | + decducks.push_back(decDucksFactory->createRubberDuck()); |
| 32 | + normducks.push_back(normDucksFactory->createRubberDuck()); |
29 | 33 | break;
|
30 | 34 | }
|
31 | 35 | }
|
32 |
| - for (auto duck : ducks) |
| 36 | + for (auto duck : normducks) |
33 | 37 | {
|
34 | 38 | duck->useStrategy();
|
35 | 39 |
|
| 40 | + } |
| 41 | + for (auto duck : decducks) |
| 42 | + { |
| 43 | + duck->useStrategy(); |
| 44 | + |
36 | 45 | }
|
37 | 46 | int krya=0;
|
38 |
| - for (auto duck : ducks) |
| 47 | + for (auto duck : decducks) |
39 | 48 | {
|
40 |
| - krya += duck->getCount(); |
| 49 | + auto d = dynamic_cast<DecorativeDuck*>(duck); |
| 50 | + if (d!=nullptr) |
| 51 | + krya += d->getCount(); |
41 | 52 |
|
42 | 53 | }
|
43 |
| - std::cout << krya << std::endl; |
| 54 | + std::cout << "\nnumber of quaks = "<< krya << std::endl; |
44 | 55 |
|
45 | 56 | }
|
0 commit comments