java设计模式之装饰器模式

装饰器模式和代理模式非常相似,都是用来增强原始类的功能,只不过代理类增加了是业务逻辑之外无关的的功能。

装饰器是在基础功能上的继续增强相关的功能。

我们通过一个一个画笔的设计,通过装饰器模式给画笔添加新功能

首先定义了一个抽象类

public abstract class Pen {
    public abstract void draw();
}

其次我们定义一个铅笔类

/**
 * 普通的铅笔
 */
public class Pencil extends Pen{
    @Override
    public void draw() {
        System.out.println("Pencil.draw()");
    }
}

单纯一个铅笔也画不好一幅画,如果能有多个彩色铅笔就更好了

/**
 * 给铅笔新增加了颜色功能
 */
public class ColorDecorator extends Pen{
    protected Pen pen;

    public ColorDecorator(Pen pen) {
        this.pen = pen;
    }

    @Override
    public void draw() {
        System.out.print("RedColor ");
        pen.draw();
    }
}

有颜色挺好,如果线条的粗细可以调整就更好了,那我们在给铅笔装饰一个线条粗细的功能

/**
 * 给铅笔新增了线条宽度的功能
 */
public class WidthDecorator extends Pen{
    protected Pen pen;

    public WidthDecorator(Pen pen) {
        this.pen = pen;
    }


    @Override
    public void draw() {
        System.out.print("Width ");
        pen.draw();
    }
}

OK,这下就可以开始画画了

public class Board {
    public static void main(String[] args) {
        Pencil pencil = new Pencil();
        pencil.draw();
        ColorDecorator colorDecorator = new ColorDecorator(pencil);
        colorDecorator.draw();
        WidthDecorator widthDecorator = new WidthDecorator(colorDecorator);
        widthDecorator.draw();
    }
}

我们既可以使用普通的铅笔画画,也可以不断添加新的功能。

输出:

Pencil.draw()
RedColor Pencil.draw()
Width RedColor Pencil.draw()

 

posted @ 2022-02-01 19:57  Mars.wang  阅读(38)  评论(0编辑  收藏  举报