decorator 裝飾模式
裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴(kuò)展一個對象的功能仆嗦。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。重要的一點是裝飾器既有基類的多態(tài)指針又繼承于基類
/**
* 流基類
*/
class stream
{
public:
virtual void read()=0;
virtual void write()=0;
virtual void seek()=0;
};
/**
* 文件流
*/
class fileStream : public stream
{
virtual void read()
{
cout<<"文件讀取"<<endl;
}
virtual void write()
{
cout<<"文件寫"<<endl;
}
virtual void seek()
{
cout<<"文件隨機(jī)"<<endl;
}
};
/**
* 網(wǎng)絡(luò)流
*/
class netStream : public stream
{
virtual void read()
{
cout<<"網(wǎng)絡(luò)讀取"<<endl;
}
virtual void write()
{
cout<<"網(wǎng)絡(luò)寫"<<endl;
}
virtual void seek()
{
cout<<"網(wǎng)絡(luò)隨機(jī)"<<endl;
}
};
/*
* 裝飾器
*/
class decorator : public stream
{
public:
decorator(stream* _st):st(_st){}
protected:
stream* st;
};
//緩存裝飾
class cacheDecorator : public decorator
{
public:
cacheDecorator(stream* _st):decorator(_st){}
virtual void read()
{
st->read();
cout<<"緩存讀"<<endl;
}
virtual void write()
{
st->write();
cout<<"緩存寫"<<endl;
}
virtual void seek()
{
st->seek();
cout<<"緩存隨機(jī)"<<endl;
}
};
//加密裝飾
class decryptDecorator : public decorator
{
public:
decryptDecorator(stream* _st):decorator(_st){}
virtual void read()
{
st->read();
cout<<"加密讀"<<endl;
}
virtual void write()
{
st->write();
cout<<"加密寫"<<endl;
}
virtual void seek()
{
st->seek();
cout<<"加密隨機(jī)"<<endl;
}
};
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
fileStream* file = new fileStream();
netStream* net = new netStream();
//緩存
cacheDecorator* cache = new cacheDecorator(file);
decryptDecorator* decript = new decryptDecorator(net);
cache->read();
cache->write();
decript->read();
decryptDecorator* decript1 = new decryptDecorator(cache);
decript1->read();
decript1->seek();
return 0;
}
我覺得這個設(shè)計模式最重要的就是裝飾器中既有基類的多態(tài)指針力麸,又繼承基類。讓裝飾器可以不斷地改變對象功能并且保持對象不變育韩。