设计模式--结构型模式--装饰者模式

//Structural Patterns--Decorator
//结构型模式--装饰者模式

//Component(抽象构件):给出一个抽象接口,以规范准备接收附加责任的对象。
//ConcreteComponent(具体构件):定义一个将要接收附加责任的类。
//Decorator(抽象装饰类):持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
//ConcreteDecorator(具体装饰类):负责给构件对象添加上附加的责任。

//----------------------------------------------
//Component(抽象构件)
class Stream
{
public:
    virtual void read() = 0;
    virtual void seek() = 0;
    virtual void write() = 0;

    virtual ~Stream(){}
};

//----------------------------------------------
//ConcreteComponent(具体构件)
class FileStream : public Stream
{
public:
    virtual void read(){cout << "FileStream read." << endl;}
    virtual void seek(){cout << "FileStream seek." << endl;}
    virtual void write(){cout << "FileStream write." << endl;}
};
class NetworkStream : public Stream
{
public:
    virtual void read(){cout << "NetworkStream read." << endl;}
    virtual void seek(){cout << "NetworkStream seek." << endl;}
    virtual void write(){cout << "NetworkStream write." << endl;}
};
class MemoryStream : public Stream
{
public:
    virtual void read(){cout << "MemoryStream read." << endl;}
    virtual void seek(){cout << "MemoryStream seek." << endl;}
    virtual void write(){cout << "MemoryStream write." << endl;}
};

//----------------------------------------------
//Decorator(抽象装饰类)
class DecoratorStream : public Stream
{
protected:
    Stream *pStream;
public:
    DecoratorStream(Stream *st):pStream(st){}

    virtual void read() = 0;
    virtual void seek() = 0;
    virtual void write() = 0;

    virtual ~DecoratorStream(){}
};

//----------------------------------------------
//ConcreteDecorator(具体装饰类)
class CryptoStream : public DecoratorStream
{
public:
    CryptoStream(Stream *st):DecoratorStream(st){}

    virtual void read(){cout << "Crypto ." << endl;pStream->read();}
    virtual void seek(){cout << "Crypto" << endl;pStream->seek();}
    virtual void write(){cout << "Crypto" << endl;}
};

class BufferedStream : public DecoratorStream
{
public:
    BufferedStream(Stream *st):DecoratorStream(st){}

    virtual void read(){cout << "Buffered ." << endl;pStream->read();}
    virtual void seek(){cout << "Buffered" << endl;pStream->seek();}
    virtual void write(){cout << "Buffered" << endl;pStream->write();}
};
class CryptoBufferedStream : public DecoratorStream
{
public:
    CryptoBufferedStream(Stream *st):DecoratorStream(st){}

    virtual void read(){cout << "CryptoBuffered ." << endl;pStream->read();}
    virtual void seek(){cout << "CryptoBuffered" << endl;pStream->seek();}
    virtual void write(){cout << "CryptoBuffered" << endl;pStream->write();}
};


//-------------------------------------------------------------
//测试
void dpDecoratorTestMain()
{

    //---------------------------------------------------------
    Stream *pFileStream = new FileStream();
    
    Stream *pCryptoStream = new CryptoStream(pFileStream);
    Stream *pBufferedStream = new BufferedStream(pCryptoStream);
    Stream *pCryptoBufferedStream = new CryptoBufferedStream(pBufferedStream);

    pFileStream->read();

    pCryptoStream->read();
    pBufferedStream->read();
    pCryptoBufferedStream->read();

    if(pFileStream) {delete pFileStream; pFileStream = NULL;}
    if(pCryptoStream) {delete pCryptoStream; pCryptoStream = NULL;}
    if(pCryptoBufferedStream) {delete pCryptoBufferedStream; pCryptoBufferedStream = NULL;}

    //---------------------------------------------------------
    return;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值