在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。是软件开发中广泛应用的一种编程方法,它可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(6)桥接模式》文章中,我们介绍了桥接模式。本文是这个系列的第七篇章,我们将讲解一下装饰器模式的实现方式、应用场景以及它的用途。
装饰器模式是一种结构型设计模式,用于动态地为对象添加额外的行为或责任,而无需修改其原始类。它允许将对象包装在一系列装饰器中,每个装饰器都添加一些特定的功能,从而实现对对象行为的灵活扩展。
这里采用绘图的例子来讲解一下此模式的代码实现。首先是定义一个Shape接口,里边有个draw()方法,表示绘制图形的操作
/**
* 形状接口
* @author Jensen
* @date 2024-01-18
* */
public interface Shape {
void draw();
}
随后创建一个圆形Circle实现类,表示画一个圆
/**
* 圆圈
* @author Jensen
* @date 2024-01-18
* */
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("默认色的圆圈");
}
}
此时,我们再创建一个装饰器ShapeDecorator类,并实现了Shape,还包含一个 Shape 类型的变量 shape,表示要装饰的对象。
/**
* 形状装饰抽象类
* @author Jensen
* @date 2024-01-18
* */
public abstract class ShapeDecorator implements Shape{
protected Shape shape;
public ShapeDecorator(Shape shape) {
this.shape = shape;
}
public void draw(){
shape.draw();
}
}
现在,我们还要创建一个GreenShapeDecorator类,GreenShapeDecorator类是一个具体装饰器类,继承了ShapeDecorator,并实现了draw()具体,在绘制图形时涂上了一个绿色
public class GreenShapeDecorator extends ShapeDecorator {
public GreenShapeDecorator(Shape shape) {
super(shape);
}
@Override
public void draw(){
shape.draw();
System.out.println("涂的颜色是:绿色");
}
}
这样,我们就完成了装饰器的基本逻辑
首先我们画一个普通的圆形,然后再给圆形加上绿色
System.out.println("------------------------------装饰器模式-----------------------------");
Circle circle = new Circle();
System.out.println("装饰前的:");
circle.draw();
System.out.println("====================");
System.out.println("给形状上色:");
GreenShapeDecorator greenShapeDecorator = new GreenShapeDecorator(circle);
greenShapeDecorator.draw();
在实际应用中,装饰器模式经常用于图形界面(GUI)开发、输入/输出流处理、缓存机制、日志记录等领域,可以有效地提高程序的可扩展性和可维护性。比如 Java Swing 组件是一个经典的装饰器模式的例子。它允许在运行时动态地向组件添加功能,如边框、背景、文本等等。可以使用 BorderFactory 来向组件添加边框,使用 Color 来设置组件的背景颜色,使用 Font 来设置组件的字体等等。