在java IO 流中我们经常看到这样的写法:

ObjectOutputStream oos = new ObjectOutputStream(
new BufferedOutputStream(new FileOutputStream("obj.ser")));

这其实就是IO流使用装饰设计模式,装饰设计模式通常包含:

1、抽象的组件(抽象类或接口)

2、具体的组件:需要装饰的对象

3、抽象的装饰:包含了对抽象组件的引用以及装饰着共同的方法

4、具体的装饰类:被装饰的对象

下面模拟咖啡用装饰模式,直接上完整代码:

package com.xzlf.io;

/**
* 模拟咖啡
* 1、抽象的组件(抽象类或接口)
* 2、具体的组件:需要装饰的对象
* 3、抽象的装饰:包含了对抽象组件的引用以及装饰着共同的方法
* 4、具体的装饰类:被装饰的对象
* @author xzlf
*
*/
public class DecorateTest02 {
public static void main(String[] args) {
Drink coffe = new Coffe();
Drink milk = new Milk(coffe);
System.out.println(milk.info() + "-->" + milk.cost());
Drink suger = new Suger(coffe);
System.out.println(suger.info() + "-->" +suger.cost());
suger = new Suger(milk);
System.out.println(suger.info() + "-->" +suger.cost());
}
} /* 抽象组件 */
interface Drink{
double cost();// 费用
String info();// 说明 } /* 具体组件 */
class Coffe implements Drink{
private String name = "原味咖啡"; @Override
public double cost() {
return 10;
} @Override
public String info() {
return name;
} } /* 抽象的装饰类 */
abstract class Decorate implements Drink{
private Drink drink; public Decorate(Drink drink) {
this.drink = drink;
} @Override
public double cost() {
return drink.cost();
} @Override
public String info() {
return drink.info();
}
} /* 具体的装饰类 */
class Milk extends Decorate{ public Milk(Drink drink) {
super(drink);
} @Override
public double cost() {
return super.cost()*10;
} @Override
public String info() {
return super.info() + "加入了牛奶";
}
} /* 具体的装饰类 */
class Suger extends Decorate{ public Suger(Drink drink) {
super(drink);
} @Override
public double cost() {
return super.cost()*2;
} @Override
public String info() {
return super.info() + "加入了蔗糖";
}
}

运行测试:

Java IO 流 -- 设计模式:装饰设计模式的更多相关文章

  1. Java IO流以及装饰器模式在其上的运用

    流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输 ...

  2. [javaSE] IO流(装饰设计模式)

    装饰设计模式:当想要对已有的对象进行功能增强时,可以自定义类将已有的对象传入,并提供加强功能,自定义的该类称为装饰类 典型的: Reader--FileReader --BufferedReader ...

  3. 【转】java io 流 设计模式

    知识点:什么是装饰模式: http://wenku.baidu.com/view/ad4eac9f51e79b896802263b.html(原理讲的很清楚) http://wenku.baidu.c ...

  4. java IO流的继承体系和装饰类应用

    java IO流的设计是基于装饰者模式&适配模式,面对IO流庞大的包装类体系,核心是要抓住其功能所对应的装饰类. 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的 ...

  5. JAVA.IO流学习笔记

    一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...

  6. Java IO流01-总叙

     Java IO包体系结构图: 1.流式部分――IO的主体部分: 2.非流式部分——主要包含一些辅助流式部分的类,如:File类.RandomAccessFile类和FileDescriptor等类: ...

  7. Java io流详解二

    原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...

  8. IO流与装饰者模式

    java使用IO流来处理不同设备之间数据的交互;所有的IO操作实际上都是对 Stream 的操作 从功能上划分: 输入流: 当数据从源进入的编写的程序时,称它为输入流; 输出流: 从程序输出回另一个源 ...

  9. Java IO流题库

    一.    填空题 Java IO流可以分为   节点流   和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...

随机推荐

  1. PyCharm3.0 快捷键

    1.编辑(Editing) Ctrl + Space    基本的代码完成(类.方法.属性)Ctrl + Alt + Space  快速导入任意类Ctrl + Shift + Enter    语句完 ...

  2. 20175314薛勐 数据库MySQL(课下作业,必做)

    数据库MySQL(课下作业,必做) 要求 下载附件中的world.sql.zip, 参考Intellj IDEA 简易教程:数据库,导入world.sql,提交导入成功截图 编写程序,查询世界上超过& ...

  3. CSS样式的4种写法 | 以及选择器的几种用法

    CSS样式: 1.内部样式表 <style type="text/css">    样式表写法   </style> 2.使用link标签,在文档中声明使用 ...

  4. Reface.NPI 方法名称解析规则详解

    在上次的文章中简单介绍了 Reface.NPI 中的功能. 本期,将对这方法名称解析规则进行详细的解释和说明, 以便开发者可以完整的使用 Reface.NPI 中的各种功能. 基本规则 方法名称以 I ...

  5. vue中的js引入图片,使用require相关问题

    vue中的js引入图片,必须require进来 或者引用网络地址 <template> <div class="home"> <img alt=&qu ...

  6. ajax前端传递对象给后端

    前端操作如下即可:

  7. Visual Studio Code 1.44 设置简体中文界面语言(小白图文教程)

    作为一款微软出品的编辑器,安装完毕后,默认界面竟然不是中文!而更“丧心病狂”的是菜单里竟然连“设置”或“设置语言”这种PC软件常见选项也没有!!这种设计对小白而言简直 反!!!人!!!类!!! (默认 ...

  8. 1037 Magic Coupon (25分)

    The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, m ...

  9. JDBCUtils,根据当前MySQL数据库下面的表生成java实体类

    自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵. 初始化配置: //驱动程序名//不固定,根据驱动 static String driver = & ...

  10. qq群排名靠前最新方法

    QQ群排名这几年是越来越火,因为很多灰产业都选择做QQ群排名,毕竟没有那么严,那么要做QQ群排名虽然不难,但是还是需要一点技术和软件的. https://url.cn/5JbR4C8 QQ群排名分为如 ...