设计模式之装饰者模式DecoratorPattern(四)

一、概述

装饰者模式(Decorator Pattern)是一种用于动态地给一个对象添加一些额外的职责的设计模式。就增加功能来说,装饰者模式相比生成子类更为灵活。装饰者模式是一种对象结构型模式。

装饰者模式可以在不改变一个对象本身功能的基础上增强其功能,通过采用组合而非继承的方式,实现了在运行时动态地扩展一个对象的功能。装饰者模式提供了一种比继承更加灵活的方式来扩展一个对象的功能。

二、模式结构

装饰者模式包含以下角色:

  • 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
  • 具体构件(ConcreteComponent)角色:实现抽象构件,具体到某一个对象。
  • 装饰(Decorator)角色:持有一个指向抽象构件的引用并继承抽象构件的接口。
  • 具体装饰(ConcreteDecorator)角色:实现装饰角色,负责为构件对象“贴上”附加的责任。

三、代码实例

1、Component接口

package com.xu.demo.decoratorPattern;// 抽象构件角色
public interface Component {void operation();
}

2、ConcreteComponent类

package com.xu.demo.decoratorPattern;// 具体构件角色
public class ConcreteComponent implements Component {@Overridepublic void operation() {System.out.println("执行具体构件对象的操作");}
}

3、 Decorator类

package com.xu.demo.decoratorPattern;// 抽象装饰者角色
public class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component = component;}@Overridepublic void operation() {if (component != null) {component.operation();}}
}

4、ConcreteDecoratorA子类

package com.xu.demo.decoratorPattern;// 具体装饰角色A
public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}@Overridepublic void operation() {//调用父类的operation方法super.operation();//再调用自己的内部额外增强方法addedFunctionA();}public void addedFunctionA() {System.out.println("为构件对象添加功能A");}
}

5、 ConcreteDecoratorB子类

package com.xu.demo.decoratorPattern;// 具体装饰角色B
public class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component component) {super(component);}@Overridepublic void operation() {//调用父类的operation方法super.operation();//再调用自己的内部额外增强方法addedFunctionB();}public void addedFunctionB() {System.out.println("为构件对象添加功能B");}
}

6、DecoratorPattern类

package com.xu.demo.decoratorPattern;public class DecoratorPattern {public static void main(String[] args) {Component component = new ConcreteComponent();// 使用装饰者A增强功能component = new ConcreteDecoratorA(component);// 使用装饰者B进一步增强功能component = new ConcreteDecoratorB(component);/*执行操作,会依次调用ConcreteComponent的operation、ConcreteDecoratorA的addedFunctionA、ConcreteDecoratorB的addedFunctionB*/component.operation();}
}

 运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux dma的使用

设备树配置 驱动代码 static void bcm2835_dma_init(struct spi_master *master, struct device *dev) { struct dma_slave_config slave_config; const __be32 *addr; dma_addr_t dma_reg_base; int ret; /* base address in dma-space */ addr of_get_address(master->de…

基于 React 的图形验证码插件

react-captcha-code NPM 地址 : react-captcha-code - npm npm install react-captcha-code --save 如下我自己的封装: import Captcha from "react-captcha-code";type CaptchaType {captchaChange: (captchaInfo: string) > void;code…

目前全球各类遥感卫星详细介绍

一、高分一号 高分一号(GF-1)是中国高分辨率对地观测系统重大专项(简称高分专项)的第一颗卫星。“高分专项”于2010年5月全面启动,计划到2020年建成中国自主的陆地、大气和海洋观测系统。 高分一号(GF-1&…

React的useEffect

概念:useEffect是一个React Hook函数,组件渲染之后执行的函数 参数1是一个函数,可以把它叫做副作用函数,在函数内部可以放置要执行的操作参数2是一个数组(可选参),在数组里放置依赖项&#x…

Linux系统中搭建Mosquitto MQTT服务并实现远程访问本地消息代理进行通信

文章目录 1. Linux 搭建 Mosquitto2. Linux 安装Cpolar3. 创建MQTT服务公网连接地址4. 客户端远程连接MQTT服务5. 代码调用MQTT服务6. 固定连接TCP公网地址7. 固定地址连接测试 今天和大家分享一下如何在Linux系统中搭建Mosquitto MQTT协议消息服务端,并结合Cpolar内网穿透工具…

使用 Python 和 OpenCV 进行实时目标检测的详解

使用到的模型文件我已经上传了,但是不知道能否通过审核,无法通过审核的话,就只能 靠大家自己发挥实力了,^_^ 目录 简介 代码介绍 代码拆解讲解 1.首先,让我们导入需要用到的库: 2.然后,设…

【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)

🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、简单介绍Sizeof和Strlen1.1 Sizeof1.2 Strlen函数1.3 Sie…

快速建站介绍

随着在线业务和电子商务的规模不断扩大,初创公司、个人网站和小型企业都需要快速地搭建自己的网站,以便更好地展示自己、推广产品和服务,并实现在线交易。快速建站已成为在线业务发展的一种主流方式,因为它能够快速地创建一个响应…

uniapp 自定义 App启动图

由于uniapp默认的启动界面太过普通 所以需要自定义个启动图 普通的图片不可以过不了苹果的审核 所以使用storyboard启动图 生成 storyboard 的网站:初雪云-提供一站式App上传发布解决方案

Java学习第02天-类型转换、运算符

目录 类型转换 自动类型转换 表达式的自动类型转换 强制类型转换 运算符 基本运算符 案例解答 连接字符串 自增自减运算符 面试习题 赋值运算符 比较运算符 逻辑运算符 基本逻辑运算符 短路逻辑运算符 三元运算符 基础知识 拓展案例 运算符优先级 读取用户…

UNeXt: a Low-Dose CT denoising UNet model with the modified ConvNeXt block

UNeXt:采用改进的ConvNeXt块的低剂量CT去噪UNet模型 论文链接:https://ieeexplore.ieee.org/document/10095645 项目链接:没找到 Abstract 近几十年来,临床医生广泛使用计算机断层扫描(CT)进行医学诊断。医疗辐射有潜在危险&am…

77、贪心-买卖股票的最佳时机

思路 具体会导致全局最优,这里就可以使用贪心算法。方式如下: 遍历每一位元素找出当前元素最佳卖出是收益是多少。然后依次获取最大值,就是全局最大值。 这里可以做一个辅助数组:右侧最大数组,求右侧最大数组就要从…

ADS1.2中的代码debug的时候不出来代码的解决办法

我总觉得ADS1.2这个软件挺奇怪的,一阵一阵的,我遇到了很多奇怪的问题,这里记录一下吧。 1、新建文件的时候,没法选择这个add to project 解决办法:如果没有已存在的.mcp文件,就先新建project,然…

项目运行到手机端

运行到真机 手机和点到连在同一个wifi网络下面点击hbuiler上面的预览得到一个,network的网址这个时候去在手机访问,那么就可以访问网页了 跨域处理 这个时候可能会访问存在跨域问题 将uniapp的H5版本运行到真机进行调试,主要涉及到跨域问题…

java-Spring-mvc-(请求和响应)

目录 📌HTTP协议 超文本传输协议 请求 Request 响应 Response 🎨请求方法 GET请求 POST请求 📌HTTP协议 超文本传输协议 HTTP协议是浏览器与服务器通讯的应用层协议,规定了浏览器与服务器之间的交互规则以及交互数据的格式…

【机器学习】HQ-Edit引领图像编辑新潮流

科技新纪元:HQ-Edit引领图像编辑新潮流 一、HQ-Edit的诞生:一场技术的革命二、技术实现与优势:强大的编辑能力和精准的匹配三、应用前景与实例展示:InstructPix2Pix的突破 在数字化时代,图像编辑技术正以前所未有的速度…

M3D-NCA: Robust 3D Segmentation with Built-In Quality Control论文速读

文章目录 M3D-NCA: Robust 3D Segmentation with Built-In Quality Control摘要方法实验结果 M3D-NCA: Robust 3D Segmentation with Built-In Quality Control 摘要 这是关于医学图像分割的一篇论文的结构化总结: 背景和挑战: 医学图像分割依赖于大型…

【热闻速递】Google 裁撤 Python研发团队

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 【🔥热闻速递】Google 裁撤 Python研发团队引入研究结论 【&#x1f5…

xyctf ez_rand

[核心的代码就是这一部分,只要得到v4的值,也就是随机种子,那就可以把值弄出来了。所以我们需要做的就是爆破随机种子。 然后有一点是需要注意的,IDA这里显示的数据有可能是小端序的,所以我们需要export data&#xff…

DSP实时分析平台设计方案:924-6U CPCI振动数据DSP实时分析平台

6U CPCI振动数据DSP实时分析平台 一、产品概述 基于CPCI结构完成40路AD输入,30路DA输出的信号处理平台,处理平台采用双DSPFPGA的结构,DSP采用TI公司新一代DSP TMS320C6678,FPGA采用Xilinx V5 5VLX110T-1FF1136芯片&#xff…