java装饰_java装饰模式

本文详细介绍了Java IO中的装饰模式,通过DataOutputStream、BufferedOutputStream和FileOutputStream的组合使用为例,阐述了装饰模式的四个组成部分:抽象构件角色、具体构件角色、抽象装饰角色和具体装饰角色。在示例代码中,展示了如何通过装饰模式实现功能的动态扩展,增强了代码的灵活性。
摘要由CSDN通过智能技术生成

在java的IO中就是运用装饰模式设计的。一层装饰一层

如:DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt")));

装饰模式的组成:1、抽象构件角色:相当java.io中的OutputStream或者是InputStream

2、具体构件角色:相当于java.io中的FileInputStream或者是FileOutputStream

3、抽象装饰角色:持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口(即该角色继承或实现抽象构件角色)相当于java.io中的FilterInputStream或FilterOutputStream。

4、具体装饰角色:负责给构件对象添加附加功能。相当于java.io的BufferedInputStream或BufferedOutputStream。

代码实现如下:

/***定义抽象构件角色,并定义一个方法*/

public interfaceComponent {public voiddoSomething();

}

/*** 定义具体构件角色,实现方法*/

public class ConcreteComponent implementsComponent {

@Overridepublic voiddoSomething() {

System.out.println("FileInputStream");

}

}

/*** 定义抽象装饰角色,持有构件对象的引用,并定义一个与抽象构件接口一致的接口(即该角色继承或实现抽象构件角色)

*@authoracer

**/

public class Derector implementsComponent{privateComponent component;publicDerector(Component component){this.comonent =component;

}

@Overridepublic voiddoSomething() {

component.doSomething();

}

}

/*** 定义具体装饰角色,并添加附加功能

*@authoracer

**/

public class ConcreteDerector1 extendsDerector {publicConcreteDerector1(Compenent component) {super(component);

}

@Overridepublic voiddoSomething() {super.doSomething();

doAnything();

}public voiddoAnything(){

System.out.println("DataInputStream");

}

}

/*** 装饰模式,客户端测试

*

*@authoracer

**/

public classClient {public static voidmain(String[] args) {

Component component1= newConcreteComponent();

Component component2= new ConcreteDerector1(component1);//构建DataInputStream

component2.doSomething();

}

}

输出结果:

FileInputStream

DataInputStream

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值