设计模式一日一练:装饰者模式(Decorator)
来源:互联网 发布:李善兰 知乎 编辑:程序博客网 时间:2024/04/30 07:33
Decorator模式,动态地给一个对象添加一些额外的职责。
// 控件抽象基类class Widget { public: Widget(); virtual void Draw();}// 具体的控件--窗口class Window : public Widget { public: Window(); virtual void Draw();}// 控件的装饰者class Decorator : public Widget { public: Decorator(Widget*); virtual void Draw(); private: Widget* widget;}Decorator::Decorator(Widget* w) { this->widget = w;}void Decorator::Draw() { this->widget->Draw();}// 装饰者的子类,给控件添加边框效果class BorderDecorator : public Decorator { public: BorderDecorator(Widget*, int borderWidth); virtual void Draw(); private: void DrawBorder(); private: Widget* widget; int width;}BorderDecorator::BorderDecorator(Widget* widget, int borderWidth) { this->widget = widget; this->width = borderWidth;}void BorderDecorator::Draw() { this->widget->Draw(); this->DrawBorder();}// 装饰者的子类,给控件添加滚动条class ScrollDecorator : public Decorator { public: ScrollDecorator(Widget*); virtual void Draw(); private: void DrawScrollBar(); private: Widget* widget;}ScrollDecorator::ScrollDecorator(Widget* widget) { this->widget = widget;}void ScrollDecorator::Draw() { this->widget->Draw(); this->DrawScrollBar();}void Test() { Widget* window = new Window(); Widget* windowWithScroll = new ScrollDecorator(window); // 带滚动条的window Widget* windowWithScrollAndBorder = new BorderDecorator(windowWithScroll, 1);// 带滚动条和边框的window windowWithScrollAndBorder->Draw(); // destroy ...}
PS. 我的设计模式系列blog,《设计模式》专栏,通过简单的示例演示设计模式,对于初学者很容易理解入门。深入学习请看GoF的《设计模式》。
15 0
- 设计模式一日一练:装饰者模式(Decorator)
- 设计模式一日一练:中介者模式(Mediator)
- 设计模式-装饰者模式(Decorator)
- 设计模式之Decorator(装饰者)
- Decorator装饰者设计模式
- 设计模式一日一练:单件模式(Singleton)
- 设计模式一日一练:策略模式(Strategy)
- 设计模式一日一练:工厂模式(Factory)
- 设计模式一日一练:适配器模式(Adapter)
- 设计模式一日一练:观察者模式(Observer)
- 设计模式一日一练:代理模式(Proxy)
- 设计模式一日一练:生成器模式(Builder)
- 设计模式一日一练:命令模式(Command)
- 设计模式一日一练:组合模式(Composite)
- 设计模式一日一练:外观模式(Facade)
- 设计模式一日一练:桥接模式(Bridge)
- 设计模式一日一练:原型模式(Prototype)
- 设计模式一日一练:亨元模式(Flyweight)
- B-树和B+树的应用
- tomcat下配置https环境教程
- cocos2d-x 2.2.0 图片选中聚焦 ,图片描边 CCClippingNode 实现
- JavaSE_35_值传递
- 算法思路(续)
- 设计模式一日一练:装饰者模式(Decorator)
- 又是内存泄漏—”HeartBleed”漏洞及其一种可能的利用思路
- String reorder(一道自定义排序题)
- JavaSE_99_编程惯例
- C05_C语言-指针
- 设计模式一日一练:观察者模式(Observer)
- 黑马程序员-高新反射学习日记
- HBase体系结构
- JavaSE_48_Java表达式以及表达式运算符优先级