Advertisement
Razzim

wzorcebuilder Tobiasz

Nov 7th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. using namespace std;
  4.  
  5. class Product
  6. {
  7. private:
  8. string m_Typ;
  9. string m_Rozmiar;
  10. string m_Material;
  11. string m_Kolor;
  12. public:
  13. void setTyp(const string& s);
  14. void setRozmiar(const string& s);
  15. void setMaterial(const string& s);
  16. void setKolor(const string& s);
  17. void wypisz()
  18. {
  19. cout <<"Typ:" << m_Typ << "\n" << "rozmiar : " << m_Rozmiar << "\n"<< "Material : " << m_Material << "\n"<< "Kolor : " <<m_Kolor << "\n" << "---------- \n";
  20. }
  21. Product();
  22. ~Product();
  23. };
  24.  
  25. class Builder
  26. {
  27. public:
  28. virtual void BuildTyp()=0;
  29. virtual void BuildRozmiar()=0;
  30. virtual void BuildMaterial()=0;
  31. virtual void BuildKolor()=0;
  32. virtual Product* GetProduct()=0;
  33. Builder();
  34. virtual ~Builder();
  35. };
  36.  
  37. class ConcreteBuilder1:public Builder
  38. {
  39. public:
  40. ConcreteBuilder1();
  41. ~ConcreteBuilder1();
  42. virtual void BuildTyp();
  43. virtual void BuildRozmiar();
  44. virtual void BuildMaterial();
  45. virtual void BuildKolor();
  46. virtual Product* GetProduct();
  47. private:
  48. Product* m_pProduct;
  49. };
  50.  
  51. class ConcreteBuilder2:public Builder
  52. {
  53. public:
  54. ConcreteBuilder2();
  55. ~ConcreteBuilder2();
  56. virtual void BuildTyp();
  57. virtual void BuildRozmiar();
  58. virtual void BuildMaterial();
  59. virtual void BuildKolor();
  60. virtual Product* GetProduct();
  61. private:
  62. Product* m_pProduct;
  63. };
  64.  
  65. class ConcreteBuilder3:public Builder
  66. {
  67. public:
  68. ConcreteBuilder3();
  69. ~ConcreteBuilder3();
  70. virtual void BuildTyp();
  71. virtual void BuildRozmiar();
  72. virtual void BuildMaterial();
  73. virtual void BuildKolor();
  74. virtual Product* GetProduct();
  75. private:
  76. Product* m_pProduct;
  77. };
  78.  
  79. class Director
  80. {
  81. public:
  82. Director(Builder* pBuilder);
  83. ~Director();
  84. void Construct();
  85. private:
  86. Builder* m_pBuilder;
  87. };
  88.  
  89. Product::~Product()
  90. {
  91.  
  92. }
  93.  
  94. Product::Product()
  95. {
  96. }
  97.  
  98. void Product::setTyp(const string& s)
  99. {
  100. this->m_Typ = s;
  101. }
  102.  
  103. void Product::setRozmiar(const string& s)
  104. {
  105. this->m_Rozmiar = s;
  106. }
  107.  
  108. void Product::setMaterial(const string& s)
  109. {
  110. this->m_Material = s;
  111. }
  112.  
  113. void Product::setKolor(const string& s)
  114. {
  115. this->m_Kolor = s;
  116. }
  117.  
  118. Builder::Builder()
  119. {
  120. }
  121.  
  122. Builder::~Builder()
  123. {
  124. }
  125.  
  126. ConcreteBuilder1::ConcreteBuilder1()
  127. {
  128. this->m_pProduct = new Product();
  129. // cout<<"Create empty product!"<<endl;
  130. }
  131.  
  132. void ConcreteBuilder1::BuildTyp()
  133. {
  134. this->m_pProduct->setTyp("Marynarka");
  135. //cout<<"BuildPartA"<<endl;
  136. }
  137.  
  138. void ConcreteBuilder1::BuildRozmiar()
  139. {
  140. string tmp;
  141. cout << "Podaj rozmiar \n";
  142. cin >> tmp;
  143. this->m_pProduct->setRozmiar(tmp);
  144. // cout<<"BuildPartB"<<endl;
  145. }
  146.  
  147. void ConcreteBuilder1::BuildMaterial()
  148. {
  149. string tmp;
  150. cout << "Podaj material \n";
  151. cin >> tmp;
  152. this->m_pProduct->setMaterial(tmp);
  153. //cout<<"BuildPartC"<<endl;
  154. }
  155.  
  156. void ConcreteBuilder1::BuildKolor()
  157. {
  158. string tmp;
  159. cout << "Podaj kolor \n";
  160. cin >> tmp;
  161. this->m_pProduct->setKolor(tmp);
  162. //cout<<"BuildPartC"<<endl;
  163. }
  164.  
  165. Product* ConcreteBuilder1::GetProduct()
  166. {
  167. return this->m_pProduct;
  168. }
  169.  
  170. ConcreteBuilder1::~ConcreteBuilder1()
  171. {
  172. delete this->m_pProduct;
  173. this->m_pProduct = NULL;
  174. }
  175.  
  176. ConcreteBuilder2::ConcreteBuilder2()
  177. {
  178. this->m_pProduct = new Product();
  179. //cout<<"Create empty product!"<<endl;
  180. }
  181.  
  182. void ConcreteBuilder2::BuildTyp()
  183. {
  184. this->m_pProduct->setTyp("Spodnie");
  185. //cout<<"BuildPartA"<<endl;
  186. }
  187.  
  188. void ConcreteBuilder2::BuildRozmiar()
  189. {
  190. string tmp;
  191. cout << "Podaj rozmiar \n";
  192. cin >> tmp;
  193. this->m_pProduct->setRozmiar(tmp);
  194. //cout<<"BuildPartB"<<endl;
  195. }
  196.  
  197. void ConcreteBuilder2::BuildMaterial()
  198. {
  199. string tmp;
  200. cout << "Podaj material \n";
  201. cin >> tmp;
  202. this->m_pProduct->setMaterial(tmp);
  203. //cout<<"BuildPartC"<<endl;
  204. }
  205.  
  206. void ConcreteBuilder2::BuildKolor()
  207. {
  208. string tmp;
  209. cout << "Podaj kolor \n";
  210. cin >> tmp;
  211. this->m_pProduct->setKolor(tmp);
  212. //cout<<"BuildPartC"<<endl;
  213. }
  214.  
  215. Product* ConcreteBuilder2::GetProduct()
  216. {
  217. return this->m_pProduct;
  218. }
  219.  
  220. ConcreteBuilder2::~ConcreteBuilder2()
  221. {
  222. delete this->m_pProduct;
  223. this->m_pProduct = NULL;
  224. }
  225.  
  226. ConcreteBuilder3::ConcreteBuilder3()
  227. {
  228. this->m_pProduct = new Product();
  229. //cout<<"Create empty product!"<<endl;
  230. }
  231.  
  232. void ConcreteBuilder3::BuildTyp()
  233. {
  234. this->m_pProduct->setTyp("SpĆ³dnica");
  235. //cout<<"BuildPartA"<<endl;
  236. }
  237.  
  238. void ConcreteBuilder3::BuildRozmiar()
  239. {
  240. string tmp;
  241. cout << "Podaj rozmiar \n";
  242. cin >> tmp;
  243. this->m_pProduct->setRozmiar(tmp);
  244. //cout<<"BuildPartB"<<endl;
  245. }
  246.  
  247. void ConcreteBuilder3::BuildMaterial()
  248. {
  249. string tmp;
  250. cout << "Podaj material \n";
  251. cin >> tmp;
  252. this->m_pProduct->setMaterial(tmp);
  253. //cout<<"BuildPartC"<<endl;
  254. }
  255.  
  256. void ConcreteBuilder3::BuildKolor()
  257. {
  258. string tmp;
  259. cout << "Podaj kolor \n";
  260. cin >> tmp;
  261. this->m_pProduct->setKolor(tmp);
  262. //cout<<"BuildPartC"<<endl;
  263. }
  264.  
  265. Product* ConcreteBuilder3::GetProduct()
  266. {
  267. return this->m_pProduct;
  268. }
  269.  
  270. ConcreteBuilder3::~ConcreteBuilder3()
  271. {
  272. delete this->m_pProduct;
  273. this->m_pProduct = NULL;
  274. }
  275.  
  276.  
  277. Director::Director(Builder* pBuilder)
  278. {
  279. this->m_pBuilder = pBuilder;
  280. }
  281.  
  282. void Director::Construct()
  283. {
  284. this->m_pBuilder->BuildTyp();
  285. this->m_pBuilder->BuildRozmiar();
  286. this->m_pBuilder->BuildMaterial();
  287. this->m_pBuilder->BuildKolor();
  288. }
  289.  
  290. Director::~Director()
  291. {
  292. delete this->m_pBuilder;
  293. this->m_pBuilder = NULL;
  294. }
  295.  
  296. int main()
  297. {
  298. list<Product*> lst;
  299. list<Product*> :: iterator tmp;
  300. Director *d;
  301. Builder *b;
  302. int end = 0;
  303. do
  304. {
  305.  
  306. int rodzaj;
  307. cout << "Podaj rodzaj ubrania 1. Marynarka, 2. Spodnie, 3. Spodnica \n";
  308. cin >> rodzaj;
  309. switch(rodzaj)
  310. {
  311. case 1 : b= new ConcreteBuilder1(); break;
  312. case 2 : b= new ConcreteBuilder2(); break;
  313. case 3 : b= new ConcreteBuilder3(); break;
  314. default : cout << "blad";
  315. }
  316. d = new Director(b);
  317. d->Construct();
  318. lst.push_back(b->GetProduct());
  319. delete d;
  320. cout << "Kolejne zamowienie? 0- nie 1 tak \n";
  321. cin >> end;
  322.  
  323. }while(end != 0);
  324.  
  325. for(list<Product*>::iterator iterator = lst.begin(); iterator!= lst.end(); ++ iterator)
  326. {
  327. (*iterator)->wypisz();
  328. }
  329.  
  330. for(list<Product*>::iterator iterator = lst.begin(); iterator!= lst.end();)
  331. {
  332. tmp = iterator;
  333. iterator = lst.erase(iterator);
  334. iterator++;
  335. delete *tmp;
  336. }
  337.  
  338. return 0;
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement