一、动机
在某些情况下我们会过度使用继承来扩展对象的功能,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多,各种子类的组合会导致子类的膨胀
如何使对象功能的扩展能根据需要的动态来实现?同时避免扩展功能的增多带来的子类膨胀问题?从而使得任何功能扩展变化所导致的影响最低?
二、代码案例演示
public class DecoratorPattern {
interface Stream{
/**
* 读
*/
void read();
/**
* 写
*/
void write();
}
class FileStream implements Stream{
@Override
public void read() {
//实现
}
@Override
public void write() {
//实现
}
}
/**
* 装饰器
*/
class BufferStream implements Stream{
Stream stream;
public BufferStream(Stream stream) {
this.stream = stream;
}
@Override
public void read() {
//缓冲处理
stream.read();
}
@Override
public void write() {
//缓冲处理
stream.write();
}
}
}
三、概念
动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比子类继承更为灵活