zoukankan      html  css  js  c++  java
  • 设计模式学习Decorator(装饰)

    意图:动态的为一个对象添加一些额外的职责,Decorator比子类更加灵活

    示例图:

    Decorator

    image

    适用性:

    在不影响对象的情况下,以动态,透明的方式给单个对象添加职责

    处理那些可以撤销的职责

    但不能使用子类进行扩充时/类被隐藏/类定义不能生成子类…

    注意事项:

    装饰对象的接口必须与它所装饰的Component的接口一致

    示例代码:

    //Compnent同时也是基类

    class CText
    {
    public:
        CText(void);
    public:
        ~CText(void);
        public:

    //绘制接口
        virtual void Draw()
        {
            _tprintf(_T("Pure Text/n"));
        }
    };

    //Decorator拥有相同的接口

    class CTextDecorator:public CText
    {
    public:
        CTextDecorator(CText* pCompnent);
    public:
        ~CTextDecorator(void);
        public:

    //相同的绘制接口
            virtual void Draw()
            {

    //添加装饰
                DrawLine();
                m_pText->Draw();
                DrawLine();       
            }

     protected:

    //自定义的装饰行为
            virtual void DrawLine()
            {
                _tprintf(_T("--------Decorator------/n"));
            }
        private:
        CText *m_pText;   
    };

    //客户调用端用于绘制显示文字

    CText text;//待装饰对象
    CTextDecorator textDec(&text);//装饰对象
    CClient client;
    client.DrawText(&text);//客户显示文字信息
    client.DrawText(&textDec);//显示装饰之后的文字信息     

  • 相关阅读:
    UVA 10905
    UVA 10859 树形DP
    LA 4794 状态DP+子集枚举
    LA 3695 部分枚举
    UVA 11825 状态压缩DP+子集思想
    UVA 10891 区间DP+博弈思想
    HDU 5239 上海大都会 D题(线段树+数论)
    HDU 5242 上海大都会 G题
    HDU 5241 上海大都会 F题
    P1359 租用游艇
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340738.html
Copyright © 2011-2022 走看看