Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- #include <string>
- using namespace std;
- class Dekorator;
- class Komponent
- {
- public:
- virtual void Wypisz() = 0;
- };
- class Produkt: public Komponent
- {
- public:
- Produkt(string _pierwszeDanie, string _drugieDanie, string _deser) : pierwszeDanie(_pierwszeDanie),drugieDanie(_drugieDanie), deser(_deser) {}
- void Wypisz()
- {
- cout<< "Pierwsze danie: " << pierwszeDanie <<" | Drugie danie: "<< drugieDanie <<" | Deser: "<<deser<<endl;
- }
- private:
- string pierwszeDanie, drugieDanie, deser;
- };
- class Dekorator: public Komponent
- {
- public:
- Dekorator(Komponent *pKomponent) : m_pKomponentObj(pKomponent) {}
- void Wypisz()
- {
- if (m_pKomponentObj != NULL)
- {
- m_pKomponentObj->Wypisz();
- }
- }
- Komponent *zwrocKomponent()
- {
- return m_pKomponentObj;
- }
- protected:
- Komponent *m_pKomponentObj;
- };
- class Zamowienie
- {
- public:
- Zamowienie(int _nrStolika) : nrStolika(_nrStolika) {}
- ~Zamowienie()
- {
- list<Komponent*>::iterator iter1, iter2, temp;
- for (iter1 = listaOsob.begin(), iter2 = listaOsob.end(); iter1 != iter2; )
- {
- temp = iter1;
- ++iter1;
- delete *temp;
- }
- }
- void Dodaj(Komponent *pKomponent)
- {
- listaOsob.push_back(pKomponent);
- }
- void Wypisz()
- {
- cout<<"Numer stolika: "<<nrStolika<<endl;
- list<Komponent*>::iterator iter1, iter2;
- for (iter1 = listaOsob.begin(), iter2 = listaOsob.end(); iter1 != iter2; ++iter1)
- {
- (*iter1)->Wypisz();
- cout<<endl;
- }
- }
- void Podmien(Dekorator *pDekorator)
- {
- list<Komponent*>::iterator iter1, iter2;
- for (iter1 = listaOsob.begin(), iter2 = listaOsob.end(); iter1 != iter2; ++iter1)
- {
- if((*iter1)==pDekorator->zwrocKomponent())
- {
- (*iter1)=pDekorator;
- }
- }
- }
- private:
- int nrStolika;
- list<Komponent*> listaOsob;
- };
- class dodatkoweZyczenie : public Dekorator
- {
- public:
- dodatkoweZyczenie(Komponent *pDekorator, string pOpis) : Dekorator(pDekorator)
- {
- opis=pOpis;
- }
- void Wypisz()
- {
- Dekorator::Wypisz();
- AddedBehavior();
- }
- void AddedBehavior()
- {
- cout<<"Dodatkowe zyczenie: " << opis<<endl;
- }
- private:
- string opis;
- };
- int main()
- {
- Zamowienie *z = new Zamowienie(1);
- Komponent *p1 = new Produkt("Rosol","Schabowy","Lody");
- Komponent *p2 = new Produkt("Pomidorowa","Piers z kurczaka","Lody");
- Komponent *p3 = new Produkt("Ogorkowa","Golabki","Lody");
- Komponent *p4 = new Produkt("Zurek","Knedle","Lody");
- z->Dodaj(p1);
- z->Dodaj(p2);
- z->Dodaj(p3);
- z->Dodaj(p4);
- z->Wypisz();
- Dekorator *d1= new dodatkoweZyczenie(p2,"srebrna zastawa");
- Dekorator *d2= new dodatkoweZyczenie(p4,"widelec do lodow");
- z->Podmien(d1);
- z->Podmien(d2);
- cout<<endl;
- z->Wypisz();
- delete z;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement