当前位置: 代码迷 >> 综合 >> 04_装饰模式
  详细解决方案

04_装饰模式

热度:43   发布时间:2024-02-20 08:28:40.0

模式定义:

动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,装饰模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)

使用动机:

在某些情况下我们可能会“过度的使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。

class Stream
{
public:virtual char Read(int num) = 0;virtual void Seek(int pos) = 0;virtual void Write(char data) = 0;virtual ~Stream() { }
};class FileStream : public Stream
{
public:virtual char Read(int num) { return ' '; }virtual void Seek(int pos) { }virtual void Write(char data) { }
};class NetworkStream : public Stream
{
public:virtual char Read(int num) { return ' '; }virtual void Seek(int pos) { }virtual void Write(char data) { }
};// 装饰模式(扩展某类操作方法)
class CryptoStream : public Stream // 注意:这里继承Stream是为了继承接口实现
{
private:Stream *m_pStream;public:CryptoStream(Stream *pStream) : m_pStream(pStream) { }virtual char Read(int num){// 解密处理...return m_pStream->Read(num);}virtual void Seek(int pos){m_pStream->Seek(pos);}virtual void Write(char data){// 加密处理...m_pStream->Write(data);}
};int main(array<System::String ^> ^args)
{FileStream fileStream;CryptoStream cryptoStream(&fileStream); // 运行时候装配(晚绑定)NetworkStream networkStream;CryptoStream cryptoStream2(&networkStream); // 运行时候装配(晚绑定)return 0;
}

  相关解决方案