一、解决的问题
过度使用继承来扩展对象功能,随着子类增多,各种子类组合导致子类数量膨胀
二、未使用装饰者
子类数量过多
class Stream {
public:
virtual bool Read() = 0;
virtual ~Stream() = default;
};
class FileStream : public Stream {
public:
virtual bool Read() override {}
};
class CryptoFileStream : public FileStream {
public:
bool Read() override{
// 加密
FileStream::Read();
}
};
三、使用装饰者
class Stream {
public:
virtual bool Read() = 0;
virtual ~Stream() = default;
};
class FileStream : public Stream {
public:
virtual bool Read() override {}
};
class DecoratorStream : public Stream {
protected:
Stream* m_stream;
DecoratorStream(Stream* stream):m_stream(stream){}
~DecoratorStream() {
if (!m_stream) {
delete m_stream;
m_stream = nullptr;
}
}
};
class CryptoStream : public DecoratorStream {
public:
CryptoStream(Stream* stream): DecoratorStream(stream){}
bool Read() {
// 加密
m_stream->Read();
}
};
int main() {
FileStream* s1 = new FileStream();
CryptoStream* s2 = new CryptoStream(s1);
s2->Read();
delete s2;
delete s1;
}