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 @   Mars.wang  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示