主页

索引

模块索引

搜索页面

Decorator-装饰器模式

备注

dynamically adds/overrides behaviour in an existing method of an object.

  1. 装饰器类和原始类继承同样的父类,这样我们可以对原始类“嵌套”多个装饰器类

  2. 装饰器类是对功能的增强,这也是装饰器模式应用场景的一个重要特点

例-对 FileInputStream 嵌套了两个装饰器类让它既支持缓存读取,又支持基本读取数据:

InputStream in = new FileInputStream("xxx.txt");
InputStream bin = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bin);
int data = din.readInt();

与代理模式的区别

1. 代理模式中,代理类附加的是跟原始类无关的功能,而在装饰器模式中,装饰器类附加的是跟原始类相关的增强功能
2. 装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器
    为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口
// 下面是评论
3. Decorator关注为对象动态的添加功能, Proxy关注对象的信息隐藏及访问控制
4. Decorator体现多态性, Proxy体现封装性

参考

主页

索引

模块索引

搜索页面