Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. #include <string>
  4. using namespace std;
  5.  
  6. class Dekorator;
  7.  
  8. class Komponent
  9. {
  10.     public:
  11.     virtual void Wypisz() = 0;
  12. };
  13.  
  14. class Produkt: public Komponent
  15. {
  16.     public:
  17.         Produkt(string _pierwszeDanie, string _drugieDanie, string _deser) : pierwszeDanie(_pierwszeDanie),drugieDanie(_drugieDanie), deser(_deser) {}
  18.         void Wypisz()
  19.         {
  20.             cout<< "Pierwsze danie: " << pierwszeDanie <<" | Drugie danie: "<< drugieDanie <<" | Deser: "<<deser<<endl;
  21.         }
  22.     private:
  23.         string pierwszeDanie, drugieDanie, deser;
  24. };
  25.  
  26.  
  27. class Dekorator: public Komponent
  28. {
  29.     public:
  30.     Dekorator(Komponent *pKomponent) : m_pKomponentObj(pKomponent) {}
  31.     void Wypisz()
  32.     {
  33.         if (m_pKomponentObj != NULL)
  34.         {
  35.             m_pKomponentObj->Wypisz();
  36.         }
  37.     }
  38.     Komponent *zwrocKomponent()
  39.     {
  40.         return m_pKomponentObj;
  41.     }
  42.     protected:
  43.     Komponent *m_pKomponentObj;
  44. };
  45.  
  46. class Zamowienie
  47. {
  48.     public:
  49.         Zamowienie(int _nrStolika) : nrStolika(_nrStolika) {}
  50.        
  51.         ~Zamowienie()
  52.         {
  53.        
  54.             list<Komponent*>::iterator iter1, iter2, temp;
  55.             for (iter1 = listaOsob.begin(), iter2 = listaOsob.end(); iter1 != iter2; )
  56.             {
  57.                 temp = iter1;
  58.                 ++iter1;
  59.                 delete *temp;
  60.             }
  61.         }
  62.        
  63.         void Dodaj(Komponent *pKomponent)
  64.         {
  65.             listaOsob.push_back(pKomponent);
  66.         }
  67.         void Wypisz()
  68.         {
  69.             cout<<"Numer stolika: "<<nrStolika<<endl;
  70.             list<Komponent*>::iterator iter1, iter2;
  71.             for (iter1 = listaOsob.begin(), iter2 = listaOsob.end(); iter1 != iter2; ++iter1)
  72.             {
  73.                 (*iter1)->Wypisz();
  74.                 cout<<endl;
  75.             }
  76.         }
  77.        
  78.         void Podmien(Dekorator *pDekorator)
  79.         {  
  80.             list<Komponent*>::iterator iter1, iter2;
  81.             for (iter1 = listaOsob.begin(), iter2 = listaOsob.end(); iter1 != iter2; ++iter1)
  82.             {
  83.                 if((*iter1)==pDekorator->zwrocKomponent())
  84.                 {
  85.                     (*iter1)=pDekorator;
  86.                 }
  87.             }
  88.         }
  89.     private:
  90.         int nrStolika;
  91.         list<Komponent*> listaOsob;
  92. };
  93.  
  94. class dodatkoweZyczenie : public Dekorator
  95. {
  96.     public:
  97.     dodatkoweZyczenie(Komponent *pDekorator, string pOpis) : Dekorator(pDekorator)
  98.     {
  99.         opis=pOpis;
  100.     }
  101.     void Wypisz()
  102.     {
  103.         Dekorator::Wypisz();
  104.         AddedBehavior();
  105.     }
  106.     void AddedBehavior()
  107.     {
  108.         cout<<"Dodatkowe zyczenie: " << opis<<endl;
  109.        
  110.     }
  111.     private:
  112.         string opis;
  113. };
  114.  
  115.  
  116.  
  117. int main()
  118. {
  119.     Zamowienie *z = new Zamowienie(1);
  120.     Komponent *p1 = new Produkt("Rosol","Schabowy","Lody");
  121.     Komponent *p2 = new Produkt("Pomidorowa","Piers z kurczaka","Lody");
  122.     Komponent *p3 = new Produkt("Ogorkowa","Golabki","Lody");
  123.     Komponent *p4 = new Produkt("Zurek","Knedle","Lody");
  124.    
  125.     z->Dodaj(p1);
  126.     z->Dodaj(p2);
  127.     z->Dodaj(p3);
  128.     z->Dodaj(p4);
  129.  
  130.     z->Wypisz();
  131.    
  132.     Dekorator *d1= new dodatkoweZyczenie(p2,"srebrna zastawa");
  133.     Dekorator *d2= new dodatkoweZyczenie(p4,"widelec do lodow");
  134.    
  135.     z->Podmien(d1);
  136.     z->Podmien(d2);
  137.    
  138.     cout<<endl;
  139.     z->Wypisz();
  140.    
  141.     delete z;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement