c语言装饰,C++设计模式之装饰模式(Decorator)

本文介绍了装饰模式,一种用于扩展类功能的设计模式。它避免了通过继承创建大量子类导致的系统膨胀问题,而是利用装饰类实现接口并动态附加责任。文中展示了装饰模式的类视图代码,包括Component、ConcreteComponentA和ConcreteComponentB等,以及ConcreteDecoratorE和ConcreteDecoratorF如何增加新行为。
摘要由CSDN通过智能技术生成

装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口

作用装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增加子类就能扩展对象的新功能,提供了比继承更有弹性的替代方案,避免了子类数量膨胀带来的系统臃肿。

类视图

6bd2dd147a4e1e27f69b8ab7fa51f840.png

代码实现

class Component

{

public:

Component(){}

virtual ~Component(){}

virtual void operation() = 0;

};

class ConcreteComponentA : public Component

{

public:

ConcreteComponentA(){}

~ConcreteComponentA(){}

void operation()

{

fprintf(stderr, "ConcreteComponentA's operation!\n");

}

};

class ConcreteComponentB : public Component

{

public:

ConcreteComponentB(){}

~ConcreteComponentB(){}

void operation()

{

fprintf(stderr, "ConcreteComponentB's operation!\n");

}

};

class Decorator : public Component

{

public:

Decorator() :mComponent(NULL){}

virtual ~Decorator(){}

virtual void operation()

{

if (mComponent)

mComponent->operation();

}

virtual void setComponent(Component* pComponent)

{

mComponent = pComponent;

}

protected:

Component* mComponent;

};

class ConcreteDecoratorE : public Decorator

{

public:

ConcreteDecoratorE ();

virtual ~ConcreteDecoratorE ();

virtual void addBehavior()

{

mComponent->operation();

fprintf(stderr, "ConcreteDecoratorE's addBehavior!\n");

}

};

class ConcreteDecoratorF : public Decorator

{

public:

ConcreteDecoratorF ();

virtual ~ConcreteDecoratorF ();

virtual void addBehavior()

{

operation();

fprintf(stderr, "ConcreteDecoratorF's addBehavior!\n");

}

};

int main()

{

ConcreteComponentB *pComponent = new ConcreteComponentB();

ConcreteDecoratorF decorator;

decorator.setComponent(pComponent);

decorator.addBehavior();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值