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