设计模式之装饰者模式

来源:互联网 发布:入门鼠标推荐 知乎 编辑:程序博客网 时间:2024/06/17 19:32

定义

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

使用场景

Java的IO流是最经典的装饰模式。其中以输入流为例,其中InputStream相当于装饰模式中的Component,其中FileInputStream直接继承InputStream,相当于装饰模式中的ConcretComponent,FilterInputStream相当于装饰模式中的Decorator,而它的子类DataInputStream,BufferedInputStream相当于装饰模式中的ConcretDecorator。

代码示例

在本示例中新增一个加密输出流
实现简单的加密

package decrote;import java.io.FilterOutputStream;import java.io.IOException;import java.io.OutputStream;public class EncryptionOutputStream  extends FilterOutputStream{    public EncryptionOutputStream(OutputStream out) {        super(out);        // TODO Auto-generated constructor stub    }    public void write(int a) throws IOException     {        a += 2;        if (a  >= 97+26)        {            a -= 2;        }        super.write(a);    }}

客户端代码

package decrote;import java.io.BufferedOutputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.io.IOException;public class Client {    public static void main(String[] args) throws IOException    {        DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new EncryptionOutputStream(new FileOutputStream("11.txt"))));        dos.write("abcdef".getBytes());        dos.close();    }}

运行结果:
打开11.txt,可见其内容是:
cdefgh