首页 > 编程 > Java > 正文

Java设计模式-装饰器模式

2019-11-08 03:28:17
字体:
来源:转载
供稿:网友

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

从原有类改写代码,相信这是大家最容易想到的办法,但是这个办法有很多弊端,不能复用是它最致命的缺点,灵活性太差。写一个子类去继承它,在子类扩充功能。但是还是不够灵活。使用组合方式,把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));
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表