当前位置: 首页 > news >正文

设计模式-装饰器模式Decorator(结构型)

装饰器模式(Decorator)

装饰器模式是一种结构模式,通过装饰器模式可以在不改变原有类结构的情况下向一个新对象添加新功能,是现有类的包装。

图解请添加图片描述

角色

  1. 抽象组件:定义组件的抽象方法
  2. 具体组件:实现组件的抽象方法
  3. 抽象装饰器:实现抽象组件接口,聚合具体组件
  4. 具体装饰器:定义装饰方法,重写抽象组件的抽象方法,并在方法内调用具体组件的方法实现和装饰方法

代码示例

抽象组件:

public interface Shape {void paint();
}

具体组件:

public class Rotundity implements Shape {@Overridepublic void paint() {System.out.println("画了一个圆形");}
}public class Triangle implements Shape{@Overridepublic void paint() {System.out.println("画了一个三角形");}
}

抽象装饰器

public abstract class ShapeDecorator implements Shape{protected Shape shape;public ShapeDecorator(Shape shape) {this.shape = shape;}
}

具体装饰器

/** 颜色装饰*/
public class ColorDecorator extends ShapeDecorator{public ColorDecorator(Shape shape) {super(shape);}@Overridepublic void paint() {shape.paint();filling();}private void filling(){System.out.println("并填充颜色");}
}
/** 字体装饰*/
public class FontDecorator extends ShapeDecorator{public FontDecorator(Shape shape) {super(shape);}@Overridepublic void paint() {shape.paint();changePaint();}public void changePaint(){System.out.println("并加粗了字体");}
}

使用

public class Test {public static void main(String[] args) {Shape triangle = new Triangle();Shape rotundity = new Rotundity();Shape triangleColorDecorator = new ColorDecorator(triangle);Shape rotundityColorDecorator = new ColorDecorator(rotundity);System.out.println("画一个三角形,并填充颜色:");triangleColorDecorator.paint();System.out.println("画一个圆形,并填充颜色,在加粗字体:");FontDecorator fontDecorator = new FontDecorator(rotundityColorDecorator);fontDecorator.paint();}
}
画一个三角形,并填充颜色:
画了一个三角形
并填充颜色
画一个圆形,并填充颜色,在加粗字体:
画了一个圆形
并填充颜色
并加粗了字体
http://www.lryc.cn/news/373919.html

相关文章:

  • RK3588开发板中使用Qt对zip文件进行解压
  • 三、网络服务协议
  • C++初学者指南第一步---1. C++开发环境设置
  • 二维数组与指针【C语言】
  • 解决linux下安装apex库报错:ModuleNotFoundError: No module named ‘packaging‘
  • React基础教程(07):条件渲染
  • 回归预测 | Matlab实现NGO-HKELM北方苍鹰算法优化混合核极限学习机多变量回归预测
  • 操作系统——信号
  • 力扣1482.制作m束花所需的最少时间
  • 解决 Linux 和 Java 1.8 中上传中文名称图片报错问题
  • cocos开发的时候 wx.onShow在vscode里面显示红色
  • 使用 PNPM 从零搭建 Monorepo,测试组件并发布
  • Oracle 19C 数据库表被误删除的模拟恢复
  • 【CICID】GitHub-Actions语法
  • Ionic 创建 APP
  • 【数学代码】幂
  • os.system() 函数
  • Spring Boot中的RESTful API详细介绍及使用
  • nlp学习笔记
  • 使用python获取内存信息
  • 外包公司泛滥,这些常识你应该提前知道?
  • Linux下的抓包工具使用介绍
  • centos环境上:k8s 简单安装教程
  • 短视频矩阵系统/源码搭建---拆解热门视频功能开发上线
  • 手机和模拟器的 Frida 环境配置
  • 力扣1385.两个数组间的距离值
  • [C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品
  • 认识与学习JSP
  • MySql 各种 join
  • 【Android面试八股文】Android中操作多线程的方式有哪些?