IO之装饰模式

[size=medium][color=darkblue]1、概念
大白话讲,比如说我们要装修一个房子,房子就是所谓的抽象构件角色,装修一个房子分为很多方面,比如说有美化的、有设置线路的,不同的人去做不同的工作,这些不同的人群就是所谓的不同的装饰角色,美化的又分为刷大白的、刷乳胶漆的、木工之类的,这些就是具体的装饰角色。但是不管干啥都得有干活的,这些干活的就是具体的构件角色。
2、IO对比
抽象构件角色——InputStrem或OutputStream
具体构件角色——FileInputStream或FileOutputStream
装饰角色——FilterInputStream或FilterOutputStream
具体装饰角色——BufferedInputStream、BufferedOutputStream或者DataInputStream、DataOutputStream
自己看API的继承关系就明白了。
3、代码实现:
package com.oracleoaec.decorator;

public class DecoratorDemo {

public static void main(String[] args) {
ConcreatComponet componet=new ConcreatComponet();
ConcreatDecoratorB cdb=new ConcreatDecoratorB(componet);
ConcreatDecoratorA cda=new ConcreatDecoratorA(cdb);
cda.doThingA();
}

}
//被装饰类的父类 相当于InputStream
abstract class Component{
public abstract void doThingA();
}
//被装饰的类 相当于FileInputStream
class ConcreatComponet extends Component{

@Override
public void doThingA() {
System.out.println("doThingA");
}
}
//装饰角色 相当于FileterInputStream
class Decorator extends Component{
private Component com;
public Decorator(Component com){
this.com=com;
}
@Override
public void doThingA() {
com.doThingA();
}
}
//具体装饰角色 相当于BufferedInputStream
class ConcreatDecoratorA extends Decorator{

public ConcreatDecoratorA(Component com) {
super(com);
}
public void doThingA(){
super.doThingA();
doThingB();
}
private void doThingB(){
System.out.println("doThingB");
}
}
//具体的装饰角色 相当于DataInputStream
class ConcreatDecoratorB extends Decorator{

public ConcreatDecoratorB(Component com) {
super(com);
}
public void doThingA(){
super.doThingA();
doThingC();
}
private void doThingC(){
System.out.println("doThingC");
}
}[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值