Saturday, November 17, 2018

Decorator Design Pattern C++

 

In object-oriented programming, the decorator pattern is a design pattern that allows behavior to be added to an individual object, dynamically, without affecting the behavior of other objects from the same class.

 

 

 

 

 

 

#include<iostream>

using namespace std;

 

class pizza{

                public:

                virtual string getdescription() =0;

                virtual int price() = 0;

};

 

class plainpizaa:public pizza{

                public:

                virtual string getdescription()

                {

                return "plain pizza";       

                }

 

                virtual int price()

                {

                                return 5;

                }

};

 

class pizzaDecorator:public pizza{

protected:

                pizza *m_pPizza;

 

public:

                pizzaDecorator(pizza *_piza):m_pPizza(_piza){}

 

                virtual string getdescription()

                {

                                return m_pPizza->getdescription();;       

                }

 

                virtual int price()

                {

                                return m_pPizza->price();

                }

};

 

class tomato:public pizzaDecorator

{

public:

                tomato(pizza *_pizza)

                                :pizzaDecorator(_pizza){}

 

                string getdescription()

                {

                                string temp = m_pPizza->getdescription();

                                temp +="Tomato";

                                return temp;

                }

                int price()

                {

                                return m_pPizza->price() + 2;     

                }

};

class cheese:public pizzaDecorator

{

public:

                cheese(pizza *_pizza)

                                :pizzaDecorator(_pizza){}

 

                string getdescription()

                {

                                string temp = m_pPizza->getdescription();

                                temp +="cheese";

                                return temp;

                }

                int price()

                {

                                return m_pPizza->price() + 1;     

                }

};

 

int main()

{

 

                pizza *p = new tomato(new cheese(new plainpizaa()));

                cout<<p->price();

               

                return 0;

}

0 comments:

Post a Comment