码迷,mamicode.com
首页 > 其他好文 > 详细

装饰模式

时间:2015-04-15 16:33:32      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>

using namespace std;

/* Component 类 */
class Component {
public:
    virtual void Operation() = 0;
};

/* 具体Component类,被修饰 */
class ConcreteComponent: public Component {
public:
    void Operation() {cout<<"ConcreteComponent object‘s operation"<<endl;}
};

/* Decorator 基类 */
class Decorator: public Component {
public:
    void setComponent(Component *component);
    void Operation();
public:
    Component *m_component;
};

void Decorator::setComponent(Component *component){
    m_component = component;
}

void Decorator::Operation() {
    m_component->Operation();
}

/* 具体Decorator类,修饰ConcreteComponent */
class ConcreteDecoratorA: public Decorator {
public:
    void Operation();
};

void ConcreteDecoratorA::Operation() {
    Decorator::Operation();
    cout<<"ConcreteDecoratorA object‘s operation"<<endl;
}

class ConcreteDecoratorB: public Decorator {
public:
    void Operation();
};

void ConcreteDecoratorB::Operation() {
    Decorator::Operation();
    cout<<"ConcreteDecoratorB object‘s operation"<<endl;
}

void main() {
    
    ConcreteComponent cc;
    ConcreteDecoratorA cdA;
    ConcreteDecoratorB cdB;

    cdA.setComponent(&cc);
    cdB.setComponent(&cdA);

    cdB.Operation();

    system("pause");
}

 

Tips:

1. 为什么被修饰类和修饰类从同一个基类继承?

参考

    ConcreteComponent cc;
    ConcreteDecoratorA cdA;
    ConcreteDecoratorB cdB;

    cdA.setComponent(&cc);
    cdB.setComponent(&cdA);

被修饰类ConcreteComponent和修饰类ConcreteDecorator都可以被修饰.

装饰模式

标签:

原文地址:http://www.cnblogs.com/hushpa/p/4428549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!