设计模式-结构型-装饰器模式-decorator

发票基本类

public class Invoice {public void printInvoice() {System.out.println("打印发票正文");}
}

发票正文类

public class Decorator extends Invoice {protected Invoice ticket;public Decorator(Invoice ticket) {this.ticket = ticket;}@Overridepublic void printInvoice() {if (ticket != null) {ticket.printInvoice();}}
}

发票头部类

public class HeadDecorator extends Decorator {public HeadDecorator(Invoice ticket) {super(ticket);}@Overridepublic void printInvoice() {System.out.println("打印发票头");super.printInvoice();}
}

发票尾部类

public class FootDecorator extends Decorator {public FootDecorator(Invoice ticket) {super(ticket);}@Overridepublic void printInvoice() {super.printInvoice();System.out.println("打印发票尾");}
}

演示类

public class Demo {public static void main(String[] args) {Invoice t= new Invoice();Decorator ticket;ticket=new FootDecorator(new HeadDecorator(t));ticket.printInvoice();}
}

演示结果

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

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

相关文章

python复习 之 列表

遍历、增加、删除 list01 [1,2,3,4,5,6] for i in list01:print(i) # 遍历 切片 print(list01[3],----) print(list01[len(list01)-1],----) print(list01[3:],----) print(list01[:4],----) print(list01[:],----) print(list01[0:6:2],----) print(list01[::-1],----)# 增加…

Android获取连接到手机热点上的设备信息

主题:在手机开启热点网络的情况下,想要获取是哪个设备已经连接上了当前开启的热点。 实现思路:Android通过读取 /proc/net/arp 文件可以得到连接当前热点的设备信息,包括Mac地址、IP地址等信息。 一. 方法逻辑: /*** …

访问控制的三要素是______ 、 ________ 、 ________。

主体、客体、访问策略。 访问控制是计算机安全领域的一个重要概念,它确保只有经过授权的用户才能访问系统资源。访问控制通常涉及以下三个主要要素: 主体(Subject) :主体是可以对对象进行操作的实体,通常…

C# WinForm —— 05 控件简介

简介 窗体中用于输入或操作的对象,有自己的属性、方法、事件 属性:外观方法:功能事件:行为控制特征 可视化,与用户进行交互,属性,方法,事件,可供开发人员使用&#xff0…

vue 双向绑定

双向绑定:双方其中一方改变,另外一方也会跟着改变。 data() { return {inputValue: ,list: [],message: hello,checked: true,radio: ,select: [],options: [{text: A, value:{value: A}},{text: B, value:{value: B}},{text: C, value:{value: C}}], }…

ruoyi-vue-pro 前端vue js直接import导入本地文件使用方法

我的xml文件名称叫w2101.xml 第一步,删除所有依赖,否则配置以后就会启动报错: 第二步配置对应的文件格式,我当前使用的是xml文件 config.module.rule(xml).test(/\.xml$/).use(xml-loader).loader(xml-loader).end();第三步…

你应该知道的21个html小技巧

本文翻译自 21 HTML Tips You Must Know About,作者:Shefali, 略有删改。 在这篇文章中,我将分享21个HTML技巧和代码片段,可以提高你的编码技能。 链接联系人 使用HTML创建可点击的电子邮件、电话和短信链接&#xf…

转圈游戏——快速幂

目录 题目 思路 代码 题目 思路 每个小朋友移动一次的位置为,移动 q 次的位置则为。那么题目要求移动 ,最后的位置为 。 但 的范围是,而总的移动次数是 。时间复杂度是在,因此是一定不能硬算的,肯定会超时。那么该…

长期通配符证书介绍

长期通配符证书是指有效期较长的泛域名证书,这种证书允许您使用单一证书为一个主域名及其所有相关子域名提供长期的HTTPS加密服务。获取长期通配符证书的过程与普通通配符证书相似,但需要注意选择具有较长有效期的证书产品,并确保符合CA机构及…

私域电商客户要挨一刀的“订单发货管理”,微信:必须强制接入

文丨微三云营销总监胡佳东,点击上方“关注”,为你分享市场商业模式电商干货。 - 引言:超90%的私域运营商家都见到了或者说遇到了这个问题,如果没有读懂这个微信的模型机制,一定会懵逼,微三云营销总监胡佳…

zynq Lwip学习笔记-setup_isr 函数

这里写目录标题 前言一、概述二、函数体三、调用关系 前言 最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就…

SpringBoot整合MyBatis四种常用的分页方式

目录 方式1 一、准备工作 1. 创建表结构 2. 导入表数据 3. 导入pom.xml依赖 4. 配置application.yml文件 5. 创建公用的实体类 项目结构 2. 创建controller层 3. 创建service层 4. 创建mapper层 5. 创建xml文件 6. 使用postman进行测试,测试结果如下…

DNS 各记录类型说明及规则

各记录类型使用目的 记录类型使用目的A 记录将域名指向一个 IP 地址。CNAME 记录将域名指向另一个域名,再由另一个域名提供 IP 地址。MX 记录设置邮箱,让邮箱能收到邮件。NS 记录将子域名交给其他 DNS 服务商解析。AAAA 记录将域名指向一个 IPv6 地址。…

MQTT的学习

近期构建物联网平台,学习到MQTT,这里使用的是uniapp作为连接MQTT broker的,这里使用的是国产的EMQX。 MQTT的认识 MQTT 协议入门:基础知识和快速教程 | EMQ(简单的认识) 创建 MQTT 连接时如何设置参数&am…

从ChatGPT到多模态大模型:现状与未来(多模态)

ChatGPT 训练的核心技术主要包括: 预训练语言模型;有监督微调;基于人类反馈的 强 化 学 习 (ReinforcementLearningfrom Human Feedback,RLHF) 首先,通过自监督预训练使语言模型从大规模语料库中学习语言规律,具备基础 理解和生成能力;然后,通过构造指令微调数据集 并对模型进…

域名配置HSTS支持

配置前提:请确保网站已经支持https协议并且所有服务均通过https协议提供。 一、Apache服务器 编辑apache 配置文件: 在/etc/apache2/sites-enabled/website.conf中取消以下内容的注释: LoadModule headers_module modules/mod_headers.so 在/…

《1w实盘and大盘基金预测 day17》

昨天预测完美,最低3033,个人预测最低3030。有色已经开始出分歧了 昨日预测: 3030-3056-3068 明天大概率有一波反抽,反抽到3068附近,受压力下去 最近一直是中字头在护盘,等到不护就要走加速了。 证券看样子…

【科研相关知识】梯度下降算法(Gradient Descent)

梯度下降算法(Gradient Descent)梯度下降算法几种变体 梯度下降算法(Gradient Descent) 梯度下降算法是一种用于求解函数最小值的一阶优化算法。在机器学习和深度学习中,梯度下降算法被广泛用于模型训练,通过迭代的方式调整模型参数,以最小…

学籍管理

题源 map的基本操作 题目描述 您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 105105 条): 插入与修改,格式1 NAME SCORE:在系统中插入姓名为 NAME(由字母…

2. TypeScript 安装与环境配置指南

TypeScript 是 JavaScript 的一个超集,它为 JavaScript 增加了类型系统和对 ES6 的支持。TypeScript 不仅能够帮助开发者捕获代码中的错误,还能提供更好的编辑器支持,包括代码补全、接口提示等。本文将详细介绍如何在您的开发环境中安装和配置…