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);//显示装饰之后的文字信息     

  • 相关阅读:
    手写spring事务框架, 揭秘AOP实现原理。
    centos7修改端口登陆
    数据库的锁机制
    linux安装mysql5.6
    SpringMVC数据格式化
    Java处理小数点后几位
    docker学习(七)常见仓库介绍
    docker学习(六) Docker命令查询
    docker学习(六)
    docker学习(五)
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340738.html
Copyright © 2011-2022 走看看