蜗牛的家
男儿当自强
posts - 48,  comments - 21,  trackbacks - 0
1 适用性
\• 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加一些职责,如:加密层,解密层。
• 处理那些可能偶尔才会用到的特性接口
• 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持
每一种组合将产生大量的子类,使得子类数目呈爆炸性增长
#include "stdafx.h"
#include 
<iostream>
using namespace std;


class Component            //被装饰者抽象类
{
public:
    
virtual void Draw() = 0;
};
class Decorator : public Component //被装饰者基类
{
public:
    Decorator(Component 
*c) : _component(c){}
    
~Decorator() {delete _component;}

    
virtual void Draw() { if (_component) _component->Draw();}
private:
    Component 
*_component;
};
//////////////////////////////////////////////////////////////////////////
class MyComponent : public Component //被装饰者
{
public:
    
virtual void Draw() {cout << "MyComponent::Draw()" << endl;}
};
//////////////////////////////////////////////////////////////////////////
class BorderDecorator : public Decorator //边框装饰
{
public:
    BorderDecorator(Component 
*c) : Decorator(c){}
    
virtual void Draw()
    {
        cout 
<< "DrawBorder" << endl;
        Decorator::Draw();
    }
};
class ScrollDecorator : public Decorator //滚动条装饰
{
public:
    ScrollDecorator(Component 
*c) : Decorator(c){}
    
virtual void Draw()
    {
        cout 
<< "DrawSrollbar" << endl;
        Decorator::Draw();
    }
};
int main()
{
    Component 
*c2 = new BorderDecorator(
        
new MyComponent()); //装饰边框的组件
    c2->Draw();
    delete c2;

    Component 
*c3 = new ScrollDecorator(
        
new BorderDecorator(
        
new MyComponent())); //同时装饰上边框和滚动条的组件
    c2->Draw();
    delete c3;

    system(
"pause");
    
return 0;
}
posted on 2009-01-16 15:58 黑色天使 阅读(369) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜