C++装饰者模式

C++装饰者模式,第1张

C++装饰者模式

C++装饰者模式
  • 简介
  • UML
  • 优点
  • 缺点
  • 代码
  • 理解

简介

时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一些功能,最简单的做法就是修改接口,添加函数,然后继承类中都相应的添加实现,这样做倒也没什么问题,但是如果这种变化来个好几次或者继承类非常多,那工作量可就大了。

这时大神们就发明了装饰者模式,在不修改现在有接口和实现类的基础上实现功能或者状态的添加。

UML

优点

1.可以不用修改原有的接口,就可以实现新功能的添加。

2.装饰者可以很方便的转换原有接口中的实现,可以给装饰者指定不同的ConcreteComponent实现不同的功能。

缺点

1.复杂性增加,装饰者模式会导致许多小类的产生。

代码
#include 

using namespace std;


class IUser
{
public:
    virtual void comeIn() = 0;
};

class Customer : public IUser
{
public:
    void IUser();
    void comeIn() {
        cout << "a big brother come in" << endl;
    }
};

class IDecorator : public IUser
{
public:
    // old function
    virtual void comeIn() = 0;
    // new function
    virtual void getNetworkAnchorWX() = 0;
    // set decoration obj
    virtual void setComponent(IUser *user) = 0;
};

class VIP : public IDecorator
{
public:
    void comeIn() {
        m_pUser->comeIn();
    }

    void getNetworkAnchorWX() {
        cout << "xiaoerduo111" << endl;
    }
    void setComponent(IUser *pUser){
        this->m_pUser = pUser;
    }
private:
    IUser *m_pUser;
};

int main()
{
    IUser *poorMe = new  Customer();
    poorMe->comeIn();

    // I became rich
    VIP *richMe = new VIP();
    richMe->setComponent(poorMe);
    richMe->getNetworkAnchorWX();

    return 0;
}

理解

主要给一个类动态增加功能,比如产品非让你给他的需求加个自作主张的小功能,而你觉得这个功能客户肯定不要,但是你还得加,这时候可以使用装扮者模式,不改变原来的类。加入新的功能。等到客户否定了产品之后,我们直接删掉所加的功能就好了。体现了开闭原则!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4751327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存