设计模式-装饰模式

来源:互联网 发布:github for mac 下载 编辑:程序博客网 时间:2024/05/29 13:35
结构型模式-装饰模式


模式描述:通过比生成子类更灵活的方式动态的给对象添加功能。


代码实现(装饰一个房屋)


//C++


class House
{
public:
House(){}
~House(){}
House(string house) { m_house = house; }
virtual void Show() { cout << m_house << endl; }
private:
string m_house;
};
 
class Instal : public House
{
public:
void Decorate(House* component) { m_component = component; }//通过该装饰方法可以动态为其子类对象串联地添加功能
virtual void Show() { m_component->Show(); }
 
protected:
House* m_component;
};
 
class HousWithWindow : public Instal
{
public:
virtual void Show()
{
cout << "安装窗户" << endl;
m_component->Show();
}
};
 
class HousWithDoor : public Instal
{
public:
virtual void Show()
{
cout << "安装门" << endl;
m_component->Show();
}
};


//动态且顺序地为房屋装饰窗户和门
int main()
{
House* house = new House("没有门窗的房屋");//没有门窗的房屋
HousWithWindow* window = new HousWithWindow();
HousWithDoor* door = new HousWithDoor();
window->Decorate(house);//将窗户安装在没有门窗的房屋
door->Decorate(window);//将门安装在有窗户却没有门的房屋
door->Show();//door对象即为添加了窗户和门的房屋对象
return 0;
}
//模式实现过程中没有修改接口,遵循了面向对象设计的闭合原则;模式实现了动态地选择对象装饰,使装饰过程灵活的功能,降低了对象之间的耦合性。

原创粉丝点击