Posted on 2008-11-08 13:26
Herbert 阅读(730)
评论(0) 编辑 收藏 引用 所属分类:
设计模式
定义:
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
下面来看一个例子:
Room(房间):是装饰模式中的一个抽象类
Hall(大厅):是一个被装饰对象
Cookroom(厨房):同上
Decorator:装饰物的抽象类
Fan(风扇):一个装饰物
Window(窗口):同上
大厅和厨房都可以用风扇或窗口来装饰。下面来看GetDescription方法和 PrintDescription方法的实现:
string Room::PrintDescription()
{
cout<< GetDescription()<<endl;
}
string Fan::GetDescription()
{
return m_room.GetDescription() + "It has fan.";
}
string Window::GetDescription()
{
return m_room.GetDescription() + " It has window.";
}
string Hall::GetDescription()
{
return "This is hall.";
}
string Cookroom::GetDescription()
{
return "This is cookroom";
}
string Cookroom::GetDescription()
{
return "This is cookroom";
}
另外还要注意装饰物的构造方法:
Decorator::Decorator(Room *pRoom) : Room()
{
}
Fan::Fan( Room * pRoom) : Decorator(pRoom)
{
}
Cookroom::Cookroom(Room * pRoom) : Decorator(pRoom)
{
}
使用方法:
Hall * pHall;
pHall = new Cookroom( new Fan( new Hall() ) );
pHall->PrintDescription();