设计模式之装饰模式Decorator
2017-09-26 10:16
267 查看
动态地给一个对象扩展功能,而不是通过子类继承。
代码示例:
//The Window interface class
class Window
{
public:
//Draws the Window
virtual void draw() = 0;
//Returns a description of the Window
virtual string getDescription() = 0;
};
//Implementation of a simple Window without any scrollbars
class SimpleWindow : public Window
{
public:
virtual void draw() override
{
//Draw window
}
virtual string getDescription() override
{
return "simple window";
}
};
//abstract decorator class - note that it implements window
class WindowDecorator : public Window
{
protected:
Window* _windowToBeDecorated; //the window being decorated
public:
WindowDecorator(Window* windowToBeDecorated)
{
_windowToBeDecorated = windowToBeDecorated;
}
virtual void draw() override
{
_windowToBeDecorated->draw(); //Delegation
}
virtual string getDescription() override
{
return _windowToBeDecorated->getDescription(); //Delegation
}
};
//The first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator : public WindowDecorator
{
public:
VerticalScrollBarDecorator(Window* windowToBeDecorated)
: WindowDecorator(windowToBeDecorated)
{}
virtual void draw() override
{
WindowDecorator::draw();
drawVerticalScrollBar();
}
virtual string getDescription()
{
return WindowDecorator::getDescription() + ", including vertical scrollbars";
}
private:
void drawVerticalScrollBar()
{
//Draw the vertical scrollbar
}
};
//The second concrete decorator which adds horizontal scrollbar functionality
class HorizontalScrollBarDecorator : public WindowDecorator
{
public:
HorizontalScrollBarDecorator(Window* windowToBeDecorated)
: WindowDecorator(windowToBeDecorated)
{}
virtual void draw() override
{
WindowDecorator::draw();
drawHorizontalScrollBar();
}
virtual string getDescription()
{
return WindowDecorator::getDescription() + ", including horizontal scrollbars";
}
private:
void drawHorizontalScrollBar()
{
//Draw the horizontal scrollbar
}
};
void main()
{
//create a decorated window with horizontal and vertical scrollbars.
Window* decoratedWindow = new HorizontalScrollBarDecorator(new VerticalScrollBarDecorator(new SimpleWindow));
//Print the window's description
decoratedWindow->getDescription();
}
代码示例:
//The Window interface class
class Window
{
public:
//Draws the Window
virtual void draw() = 0;
//Returns a description of the Window
virtual string getDescription() = 0;
};
//Implementation of a simple Window without any scrollbars
class SimpleWindow : public Window
{
public:
virtual void draw() override
{
//Draw window
}
virtual string getDescription() override
{
return "simple window";
}
};
//abstract decorator class - note that it implements window
class WindowDecorator : public Window
{
protected:
Window* _windowToBeDecorated; //the window being decorated
public:
WindowDecorator(Window* windowToBeDecorated)
{
_windowToBeDecorated = windowToBeDecorated;
}
virtual void draw() override
{
_windowToBeDecorated->draw(); //Delegation
}
virtual string getDescription() override
{
return _windowToBeDecorated->getDescription(); //Delegation
}
};
//The first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator : public WindowDecorator
{
public:
VerticalScrollBarDecorator(Window* windowToBeDecorated)
: WindowDecorator(windowToBeDecorated)
{}
virtual void draw() override
{
WindowDecorator::draw();
drawVerticalScrollBar();
}
virtual string getDescription()
{
return WindowDecorator::getDescription() + ", including vertical scrollbars";
}
private:
void drawVerticalScrollBar()
{
//Draw the vertical scrollbar
}
};
//The second concrete decorator which adds horizontal scrollbar functionality
class HorizontalScrollBarDecorator : public WindowDecorator
{
public:
HorizontalScrollBarDecorator(Window* windowToBeDecorated)
: WindowDecorator(windowToBeDecorated)
{}
virtual void draw() override
{
WindowDecorator::draw();
drawHorizontalScrollBar();
}
virtual string getDescription()
{
return WindowDecorator::getDescription() + ", including horizontal scrollbars";
}
private:
void drawHorizontalScrollBar()
{
//Draw the horizontal scrollbar
}
};
void main()
{
//create a decorated window with horizontal and vertical scrollbars.
Window* decoratedWindow = new HorizontalScrollBarDecorator(new VerticalScrollBarDecorator(new SimpleWindow));
//Print the window's description
decoratedWindow->getDescription();
}
相关文章推荐
- 我的设计模式-装饰(Decorator)、代理(Proxy)
- [设计模式-结构型]装饰模式(Decorator)
- 【设计模式】结构型模式之装饰器Decorator
- 设计模式C++描述----10.装饰(Decorator)模式
- 步步为营 .NET 设计模式学习笔记 十四、Decorator(装饰模式)
- 23种设计模式之装饰模式(Decorator)
- (7)Java设计模式-装饰模式(Decorator)
- JAVA设计模式(7) —<结构型>装饰模式(Decorator)
- 设计模式推演——装饰已有对象(Proxy/Decorator)
- 经典设计模式1:结构型模式:DECORATOR——装饰模式
- 学会的模式-设计模式之Decorator装饰模式
- 设计模式2--装饰模式(the decorator design pattern)
- 设计模式(八)装饰器模式Decorator(结构型)
- .NET设计模式(10):装饰模式(Decorator Pattern)
- c++ 设计模式6 (Decorator 装饰模式)
- 【Unity与23种设计模式】装饰模式(Decorator)
- JAVA--装饰模式(Decorator)--设计模式七
- 24种设计模式--装饰模式【Decorator Pattern】
- Java设计模式(9)——结构型模式之装饰模式(Decorator)
- 设计模式之装饰模式(Decorator)摘录