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

【PHP设计模式08】装饰模式

【装饰模式】

      装饰模式,又称装饰器模式 或 装饰者模式 或 油漆工模式,通过创建一个“装饰对象”,在不改变原有类和使用继承的情况下,动态地扩展一个对象的功能,比直接生成子类继承更加灵活,可以通过多个不同的具体装饰类,创建多个不同的行为组合。
      结构:

  • 抽象构件(Component):是一个接口或者抽象类,定义核心的原始对象,用来规范准备接收附加责任的对象。
  • 具体构件(ConcreteComponent):实现抽象构件,通过装饰角色为其添加一些职责。
  • 抽象装饰角色(Decorator):关联抽象构件,定义装饰器的属性和新的方法,包含具体构件的实例,可以通过其子类扩展具体构件的功能。
  • 具体装饰角色(ConcreteDecorator):抽象装饰的具体实现,并给具体构件对象添加附加的责任。

      示例:下面以一个订单服务为例,在不改动原有支付方法 payOrder() 的情况下,要求支付成功后给用户增加积分,这里用装饰模式来实现,目的是对 payOrder() 方法进行装饰,扩展功能:

  • 订单服务接口 抽象构件 OrderServiceInterface.php :
<?php
namespace app\design08\controller;
//订单服务接口 抽象构件
interface OrderServiceInterface
{//创建订单public function c

相关文章:

【PHP设计模式08】装饰模式

【装饰模式】 装饰模式,又称装饰器模式 或 装饰者模式 或 油漆工模式,通过创建一个“装饰对象”,在不改变原有类和使用继承的情况下,动态地扩展一个对象的功能,比直接生成子类继承更加灵活,可以通过多个不同的具体装饰类,创建多个不同的行为组合。 结构: 抽象构件…...

寒假作业Day 01

这个项目主要是为了复习博主之前关于C语言和数据结构的寒假作业&#xff0c;大家也可以根据这些题目自己进行填写并检查自己的知识点是否过关 博主也会有错误&#xff0c;所以如果大家看到错误&#xff0c;也希望大家能够进行指正&#xff0c;谢谢大家&#xff01; Day 01 一…...

学习JAVA的第四天(基础)

目录 方法 方法的定义 方法的调用 参数 注意事项 方法的重载 练习 面向对象 类和对象 定义类的注意事项 封装 private关键字 this关键字 构造方法 标准的Javabean类 创建一个对象时&#xff0c;虚拟机做了什么&#xff1f; 方法 方法含义&#xff1a;方法是程序…...

拉美巴西阿根廷媒体宣发稿墨西哥哥伦比亚新闻营销如何助推跨境出海推广?

【本篇由言同数字科技有限公司原创】拉美地区是一个巨大的市场&#xff0c;其中包括了许多国家&#xff0c;如巴西、阿根廷、智利、哥伦比亚等。这些国家的消费者对品牌的认知度和忠诚度不同&#xff0c;而且市场环境也存在着很大的差异。因此&#xff0c;品牌需要通过跨境海外…...

SpringMVC 学习(九)之拦截器

目录 1 拦截器介绍 2 创建一个拦截器类 3 配置拦截器 1 拦截器介绍 在 SpringMVC 中&#xff0c;拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能&#xff1a; 权限验证&#xff1a;在请求处理之前…...

TCP/IP-常用网络协议自定义结构体

1、TCP/IP模型&#xff1a; 2、TCP/IP- 各层级网络协议&#xff08;从下往上&#xff09;&#xff1a; 1&#xff09;数据链路层&#xff1a; ARP: 地址解析协议&#xff0c;用IP地址获取MAC地址的协议&#xff0c;通过ip的地址获取mac地 …...

内部控制提纲

当然&#xff0c;以下是一个更详细的关于内部控制的论文提纲&#xff1a; 一、引言 1.1 内部控制的定义与重要性 解释内部控制的基本概念和它在企业管理中的作用阐述内部控制对企业风险管理和运营效率的影响 1.2 内部控制的目标与原则 列出内部控制的主要目标&#xff0c;…...

江科大stm32 定时器 TIM输出比较--学习笔记

这几天遇到输出比较相关的问题&#xff0c;于是来学习下TIM输出比较部分知识点&#xff01; 输出比较简介 CNT是计数器的值&#xff0c;CCR寄存器是捕获/ 比较寄存器 简单的讲&#xff0c;输出比较就是用来输出PWM波形。 PWM简介 占空比&#xff1a;高电平占一个周期的比例。…...

VHDL-2008语言支持

VHDL-2008语言支持 介绍 AMD Vivado™合成支持VHDL-2008标准的可合成子集。这个以下部分介绍了支持的子集以及使用它的过程。将Vivado设置为使用VHDL-2008有几种方法可以使用Vivado运行VHDL-2008文件。您可以转到源文件属性窗口&#xff0c;并从可用文件类型的下拉列表中设置…...

linux系统git的安装和配置

安装和配置 安装gitYum安装Git编译安装 运行 Git 前的配置配置git命令集配置过程 获取帮助 安装git Yum安装Git yum install git -y编译安装 编译安装可以安装较新版本的git Git下载地址&#xff1a; https://github.com/git/git/releases # 安装依赖关系 yum install curl-d…...

oracle11g数据库 冷备份与冷恢复

我们在做备份时&#xff0c;究竟需要备份数据库的哪些文件呢&#xff1f; 其实只需要备份数据文件和控制文件就可以了&#xff0c;其他的参数文件&#xff0c;重做日志文件以及口令文件与数据文件相比都非常小&#xff0c;所以在一般情况下都会一起备份。 冷备份步骤&#xf…...

考研数据结构算法机试训练1

中南大学上机压轴题 测试数据&#xff1a; 3 500 0.6 100 0.8 200 0.7 100 输出 390首先要对输入的折扣进行排序&#xff0c;优先使用比率低的z进行支付。 然后用lowcost记录目前多少钱是打过折的。T-lowcost就是剩余没打折的。 每次循环用上一个人的折扣额度。若所有人折扣额…...

SAP PO接口行项目json缺少中括号[]问题

PO接口小问题问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#xff1a;HTTP Header ITEM将缺少[].需要注意 PO接口小问题 问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#…...

STM32_DS18B20_1_芯片简介及初始化配置

DS18B20介绍 DS18B20数字温度计提供9位到12位摄氏度的温度测量&#xff0c;并具有非易失性&#xff0c;用户可编程的上下触发点的报警功能。DS18B20通过1线总线进行通信&#xff0c;根据定义&#xff0c;该总线只需要一条数据线&#xff0c;即可与中央微处理器进行通信…...

每天一个数据分析题(一百六十四)

关于OLAP系统&#xff0c;下列选项不正确的是&#xff08;&#xff09; A. 是基于数据仓库的信息进行分析处理过程 B. 用户数量相对较少&#xff0c;其用户主要是业务决策人员与管理人员 C. 对响应时间要求非常高。 D. 基础数据来源于生产系统的操作数据&#xff0c;也就是…...

单词倒排——c语言解法

以下是题目&#xff1a; 这个题中有三个点&#xff0c; 一个是将非字母的字符转换为空格&#xff0c; 第二是如果有两个连续的空格&#xff0c; 那么就可以将这两个连续的空格变成一个空格。 第三个点就是让单词倒排。 那么我们就可以将这三个点分别封装成三个函数。 还有就是…...

Python + Selenium —— 网页元素定位之class name定位!

class 属性可以为元素应用一个或者多个 CSS 样式类。 利用此属性可以与指定的 CSS 样式类关联起来&#xff0c;以此达到设置元素样式的功能。 可以这样理解&#xff0c;比如一个页面上的所有按钮&#xff0c;都想做成同样的样式&#xff0c;那么是不是要在每个按钮上写同样的 c…...

matlab simulink变压器温度仿真

1、内容简介 略 48-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab simulink变压器温度仿真_哔哩哔哩_bilibili 4、参考论文 略 大型油浸风冷变压器绕组温度场分析_高原 基于顶层油温的变压器绕组热点温度计算改进模型_陈伟根 基于热电类比理论的油浸式电…...

设计模式七:责任链模式

文章目录 1、责任链模式2、spring中的责任链模式Spring InterceptorServlet FilterNetty 1、责任链模式 责任链模式为请求创建了一个接收者对象的链&#xff0c;在这种模式下&#xff0c;通常每个节点都包含对另一个节点者的引用。每个节点针对请求&#xff0c;处理自己感兴趣…...

Git,GitHub与GitLab分别是什么?有什么关系和区别?

Git 定义&#xff1a;Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;并协助多人协作开发软件项目。作用&#xff1a;Git 可以在本地存储完整的项目历史记录&#xff0c;并允许开发者在不同的分支上进行独立的开发&#xff0c;最后将它们合并到主干分…...

Rhino 7 + Grasshopper 实战:用‘几何管道’和‘命名视图’提升BIM/参数化建模效率

Rhino 7 Grasshopper 实战&#xff1a;用‘几何管道’和‘命名视图’提升BIM/参数化建模效率 在建筑与工业设计领域&#xff0c;参数化建模已经从先锋技术转变为行业标配工具。当设计迭代以小时甚至分钟为单位进行时&#xff0c;传统建模软件的手动操作模式显得力不从心。Rhi…...

从‘准静态’到‘高效率’:ANSYS Workbench冲压仿真简化建模与计算加速技巧

从‘准静态’到‘高效率’&#xff1a;ANSYS Workbench冲压仿真简化建模与计算加速技巧 冲压成形仿真在工业设计中扮演着越来越重要的角色&#xff0c;但计算资源的消耗和仿真周期的延长常常成为工程师面临的瓶颈。当面对一个复杂的冲压件时&#xff0c;如何在保证工程精度的前…...

如何快速获取网盘直链下载地址:8大平台完整解析指南

如何快速获取网盘直链下载地址&#xff1a;8大平台完整解析指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

如何用HLB站缓存合并轻松解决B站缓存视频播放难题?离线观看爱好者的福音来了!

如何用HLB站缓存合并轻松解决B站缓存视频播放难题&#xff1f;离线观看爱好者的福音来了&#xff01; 【免费下载链接】BilibiliCacheVideoMerge &#x1f525;&#x1f525;Android上将bilibili缓存视频合并导出为mp4&#xff0c;支持安卓5.0 ~ 13&#xff0c;视频挂载弹幕播放…...

rk3568_总线设备模型匹配机制_注册dev

device注册过程1、首先将dev放入核的device链表中(platform_device_register) 2、将dev和内核中的驱动进行表较&#xff0c;若匹配则不进行后续比较&#xff0c;若不匹配&#xff0c;则一直比较直到遍历完所有的drv 3、匹配成功进入对应驱动的probe函数 platform_device_regist…...

NVIDIA Profile Inspector深度指南:解锁NVIDIA显卡隐藏配置的完整实战方法

NVIDIA Profile Inspector深度指南&#xff1a;解锁NVIDIA显卡隐藏配置的完整实战方法 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的开源工具&#xff0c;专为N…...

SpringBoot+Vue自习室座位预约系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

从游戏物理引擎到导弹模拟:用Unity/C++理解刚体动力学与运动学

从游戏物理引擎到导弹模拟&#xff1a;用Unity/C理解刚体动力学与运动学 在游戏开发中&#xff0c;我们经常需要处理物体的运动——从简单的跳跃到复杂的飞行模拟。Unity的Rigidbody组件或Unreal Engine的物理系统背后&#xff0c;隐藏着一套与导弹运动模型惊人相似的数学原理…...

终极指南:使用Blinker Python库构建企业级物联网解决方案的10个核心原则

终极指南&#xff1a;使用Blinker Python库构建企业级物联网解决方案的10个核心原则 【免费下载链接】blinker-py Blinker python library for hardware. Works with Raspberry Pi, Banan Pi, Linux devices 项目地址: https://gitcode.com/gh_mirrors/bl/blinker-py Bl…...

card.io-iOS-SDK核心组件详解:CardIOCreditCardInfo与Delegate机制

card.io-iOS-SDK核心组件详解&#xff1a;CardIOCreditCardInfo与Delegate机制 【免费下载链接】card.io-iOS-SDK card.io provides fast, easy credit card scanning in mobile apps 项目地址: https://gitcode.com/gh_mirrors/ca/card.io-iOS-SDK card.io-iOS-SDK是一…...