设计模式-装饰者模式

来源:互联网 发布:什么软件测八卦 编辑:程序博客网 时间:2024/06/05 15:16

众所周知,代码复用是面向对象中非常重要的一个特点。(decorator)装饰者模式也是所有设计模式中非常重要的一个应用。

装饰者模式又名包装器,由此看来,我们初步的猜想是将类一层一层的包装达到一定功能。

首先来看一下结构图


装饰者模式中有四个参与者

1、Component

这是一个对象接口,可以给这些对象动态添加职责。

2、ConcreteComponent

这是对象的实现类

3、Decorator

装饰者接口

4、ConcreteDecorator

具体的装饰类

代码:

public interface Component {    void show();}
//具体对象
public class Window implements Component {    public void show() {        System.out.println("生成个窗口");    }}
//装饰类接口
public abstract class Decorator implements Component{    private Component component;    public Decorator(Component component){        this.component = component;    }    public void show() {        this.component.show();    }}
//具体装饰实现类
public class BoardDecorator extends Decorator {    public BoardDecorator(Component component) {        super(component);    }    @Override    public void show(){        super.show();        drawBoard();    }    public void drawBoard(){        System.out.println("我画了一条边");    }}
public class ColorDecorator extends Decorator{    public ColorDecorator(Component component) {        super(component);    }    @Override    public void show(){        super.show();        drawColor();    }    public void drawColor(){        System.out.println("我涂上了红色");    }}
//将对象进行包装
public class Client {    public static void main(String[] args){        Component component = new ColorDecorator(new BoardDecorator(new Window()));        component.show();    }}
结果:

生成个窗口
我画了一条边
我涂上了红色

可见window类被一层层包装了

在java中也有这样的设计模式出现,比如我们的输入输出流。

例如:

BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(new File("")));
把简单的文件输入流包装成具有缓冲区的输入流。