• 装饰器模式(C++)


    介绍

    装饰器模式:允许向一个现有的对象添加新的功能,同时又不改变结构. 属于结构型模式,作为现有类的一个包装.

    目的: 动态地给一个对添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活.

    优点:

    • 装饰类和被装饰类是相互独立的,不会相互耦合;
    • 是继承的一个替代模式,装饰模式可以动态的扩展一个类的功能.

    缺点:

    • 多层装饰会变得越来越复杂.

    使用场景:

    • 扩展一个类的功能;
    • 动增加功能,动态撤销.

    UML

    image

    示例

    #include <iostream>
    
    //抽象组件角色:给出一个抽象接口,以规范准备接收附加责任的对象
    class Component{
    public:
        virtual ~Component(){}
        
        virtual void Configuration() = 0;
    };
    
    //具体组件类
    class Car: public Component {
    public:
        void Configuration() override {
            std::cout << "------Car-------" << std::endl;
        }
    };
    
    //装饰角色:持有一个组件对象的实例,并实现一个与抽象组件接口一致的接口
    class DecorateCar : public Component {
    public:
        DecorateCar(Component* car) : car_(car) {}
        void Configuration() override {
            car_->Configuration();
        }
    
    private:
        Component* car_;
    };
    
    
    //具体装饰角色:负责给组件对象添加额外的责任
    class DecorateLED: public DecorateCar {
    public:
        DecorateLED(Component* car) : DecorateCar(car){}
        
        void Configuration() override {
            DecorateCar::Configuration();
            AddLED();
        }
    
    private:
        void AddLED() {
            std::cout << "--------AddLED" << std::endl;
        }
    };
    
    //具体装饰角色:负责给组件对象添加额外的责任
    class DecoratePC : public DecorateCar {
    public:
        DecoratePC(Component* car) : DecorateCar(car) {}
        
        void Configuration() override {
            DecorateCar::Configuration();
            AddPC();
        }
    
    private:
        void AddPC() {
            std::cout << "-----------AddPC-----------" << std::endl;
        }
    };
    
    int main() {
        Car car;
        DecorateLED ledCar(&car);
        DecoratePC pcCar(&car);
        
        ledCar.Configuration();
        pcCar.Configuration();
        
        return 0;
    }
    

    本例改自: https://www.cnblogs.com/chengjundu/p/8473564.html

    适配器模式/装饰模式/代理模式的区别?

    • 适配器的特点在于兼容: 是将一个类(a)通过某种方式转换成另一个类(b);
    • 装饰器模式特点在于增强: 在一个原有类(a)的基础之上增加了某些新的功能变成另一个类(b);
    • 代理模式的特点在于隔离: 将一个类(a)转换成具体的操作类(b) .
  • 相关阅读:
    A 开场白 快速幂
    矩阵快速幂
    围棋棋盘有多少正方形 19*19
    matlab
    汉诺塔问题
    error C2504 base class undefined
    查看标准的FM以及描述等的一个数据…
    报表整合数据的时候,常见的模式:
    SQL执行顺序
    LIST&nbsp;BOX&nbsp;联动的实现
  • 原文地址:https://www.cnblogs.com/xl2432/p/13139335.html
Copyright © 2020-2023  润新知