//想要扩展功能,装饰者提供了有别于继承的另外一种选择。
//装饰者模式主要实现的功能是动态的给某一个类添加一些额外的功能,它是一个锦上添花者。
//想要扩展功能,装饰者提供了有别于继承的另外一种选择。设计模式的原则是多用组合少用继承。
class IWomen{
public:
virtual void lookIntoTheMirror() = 0;
};
//然后老婆是个爱照镜子的喜欢打扮的女人(具体需要装饰对象)
class Wife : public IWomen{
public:
virtual ~Wife(){}
void lookIntoTheMirror()
{
cout<<"镜子中的老婆 \n"<<endl;
}
};
//需要一个化妆的女人(装饰品的抽象基类)
class DecoratorWomen : public IWomen{
public:
DecoratorWomen(IWomen *women) : m_women(women){}
void lookIntoTheMirror()
{
m_women->lookIntoTheMirror();
makeUp();
}
virtual void makeUp()=0; //化妆
protected:
IWomen* m_women;
};
//下面是具体3种用于化妆的化妆品: 口红,睫毛膏,香水
class Lipstick : public DecoratorWomen{
public:
virtual~ Lipstick(){}
Lipstick(IWomen* woman) : DecoratorWomen(woman){}
void makeUp()
{
cout<<" 有火红的嘴唇!\n";
}
};
class Mascara : public DecoratorWomen
{
public:
virtual~ Mascara(){}
Mascara(IWomen* woman):DecoratorWomen(woman){};
void makeUp()
{
cout<<" 有黑黑的睫毛!\n";
}
};
class Perfume : public DecoratorWomen
{
public:
virtual~ Perfume(){}
Perfume(IWomen* woman):DecoratorWomen(woman){};
void makeUp()
{
cout<<" 有香奈儿的味道!\n";
}
};