Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- using namespace std;
- class Product
- {
- private:
- string m_Typ;
- string m_Rozmiar;
- string m_Material;
- string m_Kolor;
- public:
- void setTyp(const string& s);
- void setRozmiar(const string& s);
- void setMaterial(const string& s);
- void setKolor(const string& s);
- void wypisz()
- {
- cout <<"Typ:" << m_Typ << "\n" << "rozmiar : " << m_Rozmiar << "\n"<< "Material : " << m_Material << "\n"<< "Kolor : " <<m_Kolor << "\n" << "---------- \n";
- }
- Product();
- ~Product();
- };
- class Builder
- {
- public:
- virtual void BuildTyp()=0;
- virtual void BuildRozmiar()=0;
- virtual void BuildMaterial()=0;
- virtual void BuildKolor()=0;
- virtual Product* GetProduct()=0;
- Builder();
- virtual ~Builder();
- };
- class ConcreteBuilder1:public Builder
- {
- public:
- ConcreteBuilder1();
- ~ConcreteBuilder1();
- virtual void BuildTyp();
- virtual void BuildRozmiar();
- virtual void BuildMaterial();
- virtual void BuildKolor();
- virtual Product* GetProduct();
- private:
- Product* m_pProduct;
- };
- class ConcreteBuilder2:public Builder
- {
- public:
- ConcreteBuilder2();
- ~ConcreteBuilder2();
- virtual void BuildTyp();
- virtual void BuildRozmiar();
- virtual void BuildMaterial();
- virtual void BuildKolor();
- virtual Product* GetProduct();
- private:
- Product* m_pProduct;
- };
- class ConcreteBuilder3:public Builder
- {
- public:
- ConcreteBuilder3();
- ~ConcreteBuilder3();
- virtual void BuildTyp();
- virtual void BuildRozmiar();
- virtual void BuildMaterial();
- virtual void BuildKolor();
- virtual Product* GetProduct();
- private:
- Product* m_pProduct;
- };
- class Director
- {
- public:
- Director(Builder* pBuilder);
- ~Director();
- void Construct();
- private:
- Builder* m_pBuilder;
- };
- Product::~Product()
- {
- }
- Product::Product()
- {
- }
- void Product::setTyp(const string& s)
- {
- this->m_Typ = s;
- }
- void Product::setRozmiar(const string& s)
- {
- this->m_Rozmiar = s;
- }
- void Product::setMaterial(const string& s)
- {
- this->m_Material = s;
- }
- void Product::setKolor(const string& s)
- {
- this->m_Kolor = s;
- }
- Builder::Builder()
- {
- }
- Builder::~Builder()
- {
- }
- ConcreteBuilder1::ConcreteBuilder1()
- {
- this->m_pProduct = new Product();
- // cout<<"Create empty product!"<<endl;
- }
- void ConcreteBuilder1::BuildTyp()
- {
- this->m_pProduct->setTyp("Marynarka");
- //cout<<"BuildPartA"<<endl;
- }
- void ConcreteBuilder1::BuildRozmiar()
- {
- string tmp;
- cout << "Podaj rozmiar \n";
- cin >> tmp;
- this->m_pProduct->setRozmiar(tmp);
- // cout<<"BuildPartB"<<endl;
- }
- void ConcreteBuilder1::BuildMaterial()
- {
- string tmp;
- cout << "Podaj material \n";
- cin >> tmp;
- this->m_pProduct->setMaterial(tmp);
- //cout<<"BuildPartC"<<endl;
- }
- void ConcreteBuilder1::BuildKolor()
- {
- string tmp;
- cout << "Podaj kolor \n";
- cin >> tmp;
- this->m_pProduct->setKolor(tmp);
- //cout<<"BuildPartC"<<endl;
- }
- Product* ConcreteBuilder1::GetProduct()
- {
- return this->m_pProduct;
- }
- ConcreteBuilder1::~ConcreteBuilder1()
- {
- delete this->m_pProduct;
- this->m_pProduct = NULL;
- }
- ConcreteBuilder2::ConcreteBuilder2()
- {
- this->m_pProduct = new Product();
- //cout<<"Create empty product!"<<endl;
- }
- void ConcreteBuilder2::BuildTyp()
- {
- this->m_pProduct->setTyp("Spodnie");
- //cout<<"BuildPartA"<<endl;
- }
- void ConcreteBuilder2::BuildRozmiar()
- {
- string tmp;
- cout << "Podaj rozmiar \n";
- cin >> tmp;
- this->m_pProduct->setRozmiar(tmp);
- //cout<<"BuildPartB"<<endl;
- }
- void ConcreteBuilder2::BuildMaterial()
- {
- string tmp;
- cout << "Podaj material \n";
- cin >> tmp;
- this->m_pProduct->setMaterial(tmp);
- //cout<<"BuildPartC"<<endl;
- }
- void ConcreteBuilder2::BuildKolor()
- {
- string tmp;
- cout << "Podaj kolor \n";
- cin >> tmp;
- this->m_pProduct->setKolor(tmp);
- //cout<<"BuildPartC"<<endl;
- }
- Product* ConcreteBuilder2::GetProduct()
- {
- return this->m_pProduct;
- }
- ConcreteBuilder2::~ConcreteBuilder2()
- {
- delete this->m_pProduct;
- this->m_pProduct = NULL;
- }
- ConcreteBuilder3::ConcreteBuilder3()
- {
- this->m_pProduct = new Product();
- //cout<<"Create empty product!"<<endl;
- }
- void ConcreteBuilder3::BuildTyp()
- {
- this->m_pProduct->setTyp("SpĆ³dnica");
- //cout<<"BuildPartA"<<endl;
- }
- void ConcreteBuilder3::BuildRozmiar()
- {
- string tmp;
- cout << "Podaj rozmiar \n";
- cin >> tmp;
- this->m_pProduct->setRozmiar(tmp);
- //cout<<"BuildPartB"<<endl;
- }
- void ConcreteBuilder3::BuildMaterial()
- {
- string tmp;
- cout << "Podaj material \n";
- cin >> tmp;
- this->m_pProduct->setMaterial(tmp);
- //cout<<"BuildPartC"<<endl;
- }
- void ConcreteBuilder3::BuildKolor()
- {
- string tmp;
- cout << "Podaj kolor \n";
- cin >> tmp;
- this->m_pProduct->setKolor(tmp);
- //cout<<"BuildPartC"<<endl;
- }
- Product* ConcreteBuilder3::GetProduct()
- {
- return this->m_pProduct;
- }
- ConcreteBuilder3::~ConcreteBuilder3()
- {
- delete this->m_pProduct;
- this->m_pProduct = NULL;
- }
- Director::Director(Builder* pBuilder)
- {
- this->m_pBuilder = pBuilder;
- }
- void Director::Construct()
- {
- this->m_pBuilder->BuildTyp();
- this->m_pBuilder->BuildRozmiar();
- this->m_pBuilder->BuildMaterial();
- this->m_pBuilder->BuildKolor();
- }
- Director::~Director()
- {
- delete this->m_pBuilder;
- this->m_pBuilder = NULL;
- }
- int main()
- {
- list<Product*> lst;
- list<Product*> :: iterator tmp;
- Director *d;
- Builder *b;
- int end = 0;
- do
- {
- int rodzaj;
- cout << "Podaj rodzaj ubrania 1. Marynarka, 2. Spodnie, 3. Spodnica \n";
- cin >> rodzaj;
- switch(rodzaj)
- {
- case 1 : b= new ConcreteBuilder1(); break;
- case 2 : b= new ConcreteBuilder2(); break;
- case 3 : b= new ConcreteBuilder3(); break;
- default : cout << "blad";
- }
- d = new Director(b);
- d->Construct();
- lst.push_back(b->GetProduct());
- delete d;
- cout << "Kolejne zamowienie? 0- nie 1 tak \n";
- cin >> end;
- }while(end != 0);
- for(list<Product*>::iterator iterator = lst.begin(); iterator!= lst.end(); ++ iterator)
- {
- (*iterator)->wypisz();
- }
- for(list<Product*>::iterator iterator = lst.begin(); iterator!= lst.end();)
- {
- tmp = iterator;
- iterator = lst.erase(iterator);
- iterator++;
- delete *tmp;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement