设计模式-装饰者模式

众所周知,代码复用是面向对象中非常重要的一个特点。(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("")));
把简单的文件输入流包装成具有缓冲区的输入流。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值