装饰器/包装器模式

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("")));
    }
}

 

posted @ 2019-04-14 10:14  MigrantWorkers  阅读(361)  评论(0编辑  收藏  举报