package com.study; import java.io.*; /** * 装饰模式(包装模式wrapper) * <p> * 顾名思义,就是一个类(粗糙)还需要装饰。 * 基础类需要动态新增更种各样的功能,如果通过继承实现,会导致产生非常多的子类(类膨胀) * 将基本功能和新增的功能通过组合方式实现,来降低类的数量,这就是装饰模式的核心: * 1、实现核心功能,扩展新功能,调用功能的方式保持不变 * 2、解决类膨胀的问题(继承的解决方案) * 实例: * InputStream 抽象角色(read读取字节) 超类定义基本的核心接口 * FileInputStream 具体的角色 实现超类的核心功能,但是比较粗糙 * FilterInputStream 抽象的装饰器 * 装饰器的超类内部依赖具体角色(需要被修饰的对象实例),同时继承超类的核心接口,这样可以保证以相同的接口名称调用 * BufferedInputStream 具体的装饰器,新增了缓冲区的功能 * <p> * Servlet的request,HttpServletRequestWrapper包装器 */ public class Decorator { public static void main(String[] args) throws FileNotFoundException { /** * new BufferedInputStream(new FileInputStream(new File(""))); * FileInputStream 具体需要角色 public class FileInputStream extends InputStream 继承InputStream * BufferedInputStream 具体装饰器角色 * public class FilterInputStream(抽象装饰器) extends InputStream 继承InputStream * public class BufferedInputStream extends FilterInputStream 具体角色继承抽象角色 * 使用BufferedInputStream修饰FileInputStream,为输入流动态添加缓存区的功能,提升读取的效率 * */ InputStream in = new BufferedInputStream(new FileInputStream(new File(""))); } }