#include <iostream>
using namespace std;
class Phone{
public:
virtual void call() { }
virtual ~Phone(){}
};
class ApplePhone : public Phone{
public:
void call() override{ cout<<"ApplePhone Call"<<endl; }
};
class Decorator : public Phone{
public:
Decorator(Phone * phone) : m_phone(phone){ }
void call() override{
m_phone->call();
}
private:
Phone * m_phone;
};
class ConcreteDecoratorA: public Decorator{
public:
ConcreteDecoratorA(Phone * phone) : Decorator(phone){}
void call() override{
Decorator::call();
AddedBehavior();
}
void AddedBehavior(){ cout << "Add DecoratorA" << endl; }
};
int main()
{
cout << "Hello World!" << endl;
ConcreteDecoratorA * applePhone = new ConcreteDecoratorA(new ApplePhone());
applePhone->call();
return 0;
}