Java设计模式-装饰器模式

来源:互联网 发布:淘宝退货卖家说我调包 编辑:程序博客网 时间:2024/05/29 09:20

如果想要扩充一个类的功能,你会打算怎么做?

  1. 从原有类改写代码,相信这是大家最容易想到的办法,但是这个办法有很多弊端,不能复用是它最致命的缺点,灵活性太差。
  2. 写一个子类去继承它,在子类扩充功能。但是还是不够灵活。
  3. 使用组合方式,把Component接口(或者抽象类)作为Decorator接口(或者抽象类)的一个属性,Decorator extends Component,Decorator的Operation()方法转发Component的Operation()方法,
    ConcreteDecoratorA和ConcreteDecoratorB是Decorator的实现类,实现Operation()方法时,可以增加
    OperationPre()方式和OprationLater()方法,实现扩充功能。

UML

  • Java中的IO是明显的装饰器模式的运用。

Component:InputStream,OutputStream,Reader,Writer
ConcreteComponent:FileInputStream(从文件中读取数据流)
Decorator:FilterInputStream,FilterOutputStream,FilterRead,FilterWriter
ConcreteDecorator:BufferedInputStream(提供一个内存的缓冲区类保存输入流中的数据)
我们经常会看到如下:

//file为某个具体文件的File或者FileDescription对象 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));  
0 0
原创粉丝点击