结构型——装饰器(Decorator)day09

装饰器设计模式代码套路-咖啡加奶 装饰器设计模式具体操作: 1、抽象组件:需要装饰的抽象对象(接口或抽象父类) 2、具体组件:需要装饰的对象 3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法 4、具体装饰类:被装饰的对象 案例:咖啡加奶 1、抽象组件:需要装饰的抽象对象(接口或抽象父类) interface Drink { int cost(); String info(); } 2、具体组件:需要装饰的... 阅读详情

定义

装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)

案例

咖啡种类/单品咖啡: Espresso( 意大利浓咖啡)、ShortBlack、 LongBlack(美 式咖啡)、Decaf(无因咖啡)
调料: Milk、 Soy(豆浆)、 Chocolate
要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便
使用00的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合。

方法一:

在这里插入图片描述

方法二:

在这里插入图片描述

装饰器

客户点单的时候一般会在咖啡里面加配料,也就是需要用配料给咖啡进行装饰,装饰器模式实现如下;
在这里插入图片描述

在这里插入图片描述
1、Component 类充当抽象角色,不应该具体实现。 2、修饰类引用和继承 Component 类,具体扩展类重写父类方法。

在这里插入图片描述

装饰器模式下订单——2份巧克力+1份牛奶的LongBlack

在这里插入图片描述
说明

  1. Milk包含了LongBlack
  2. 一 份Chocolate包 含了(Milk+LongBlack)
  3. 一份Chocolate包含了(Chocolate+ Milk+LongBlack)
    4)这样不管是什么形式的单品咖啡+调料组合,通过递归方式可以方便的组合和维护。

实现

package com.xhl.Decorator;

public abstract class Drink {

	private String des;//描述
	private float price = 0.0f;
	public String getDes() {
		return des;
	}
	public void setDes(String des) {
		this.des = des;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	//计算费用的抽象方法
	//由子类实现
	public abstract float cost();
	
}

package com.xhl.Decorator;

public class Coffee extends Drink {

	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return super.getPrice();
	}

}
package com.xhl.Decorator;

public class Espresso extends Coffee {
	public Espresso() {
		setDes("意大利咖啡");
		setPrice(2.2f);
	}
}

package com.xhl.Decorator;

public class ShortBlack extends Coffee {
	public ShortBlack() {
		setDes("ShortBlack");
		setPrice(1.5f);
	}
}

package com.xhl.Decorator;

public class LongBlack extends Coffee {
	public LongBlack() {
		setDes("LongBlack");
		setPrice(2.0f);
	}
}

package com.xhl.Decorator;

public class DeCaf extends Coffee {
	public DeCaf() {
		setDes("无因咖啡");
		setPrice(1.0f);
	}
}

package com.xhl.Decorator;

public class Decorator extends Drink {
	
	private Drink obj;
	
	public Decorator(Drink obj) {
		super();
		this.obj = obj;
	}

	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return super.getPrice()+obj.cost();
	}

	@Override
	public String getDes() {
		// TODO Auto-generated method stub
		return super.getDes()+"&&"+obj.getDes();
	}
	
	

}

package com.xhl.Decorator;

public class Chocolate extends Decorator {

	public Chocolate(Drink obj) {
		super(obj);
		setDes("巧克力");
		setPrice(3.0f);
	}
	
}

package com.xhl.Decorator;

public class Mike extends Decorator {

	public Mike(Drink obj) {
		super(obj);
		setDes("牛奶");
		setPrice(1.0f);
	}
	
}


package com.xhl.Decorator;

public class Soy extends Decorator {

	public Soy(Drink obj) {
		super(obj);
		setDes("豆浆");
		setPrice(1.5f);
	}
	
}
package com.xhl.Decorator;

public class CofferBarDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Drink order = new LongBlack();
		System.out.println("LongBlack 费用:"+order.cost());
		System.out.println("LongBlack 描述:"+order.getDes());
		
		
		order = new Mike(order);
		System.out.println("加入一份牛奶   费用:"+order.cost());
		System.out.println("加入一份牛奶   描述:"+order.getDes());
		
		order = new Chocolate(order);
		System.out.println("加入一份巧克力   费用:"+order.cost());
		System.out.println("加入一份巧克力   描述:"+order.getDes());
		
		order = new Chocolate(order);
		System.out.println("2份巧克力+1份牛奶的LongBlack   费用:"+order.cost());
		System.out.println("2份巧克力+1份牛奶的LongBlack   描述:"+order.getDes());
		
		System.out.println("=====================================");
		
		Drink order2 = new Mike(new DeCaf());
		System.out.println("无因咖啡+牛奶     费用:"+order2.cost());
		System.out.println("无因咖啡+牛奶     描述:"+order2.getDes());
	}

}

在这里插入图片描述

装饰者模式在JDK应用

Java的IO结构,FilterInputStream 就是一个装饰者
在这里插入图片描述
在这里插入图片描述

多维聚合实战:从SQL到Pandas再到DAX的数据变形术 多维聚合是OLAP分析的核心能力,本质是将原始事实数据按多个维度(如地区、时间、产品)进行分组、汇总与上下文感知计算。其技术原理远超简单GROUP BY,涉及维度层级建模、筛选上下文控制、指标动态派生及长宽表结构转换等关键环节。掌握ROLLUP/CUBE、stack/unstack、CALCULATE与melt/pivot协同等操作,能显著提升BI响应速度与需求迭代效率。在销售分析、用户行为建模、实时风控等典型场景中,规范的多维聚合实践可避免‘数字漂移’‘维度断裂’‘数据抖动’等高发故障。本文聚焦Multi 阅读详情

相关推荐

拆解大疆M300电池BMS:基于TI TIDA-010030方案的硬件架构深度分析

本文深度解析了大疆M300无人机电池管理系统(BMS)基于TI TIDA-010030参考设计的硬件架构。通过对比TI方案与大疆实现的差异,详细介绍了BQ7694003监控前端和BQ34Z100电量计的优化设计,以及通信架构的可靠性改进。文章还揭示了大疆在成本、空间和标准化方面的工程妥协与创新平衡,为锂电池保护方案提供了实践参考。

weixin_27066963的博客 237

简单装饰器

代码实现: import time def timer(func): #timer(test1) func=test1 def deco(): start_time=time.time() func() end_time=time.time() print("the fun run time is %s"%(end_ti...

小王子的花的博客 348

eda、gnm、anm究竟是个啥?

eda:主成分分析 gnm:高斯网络模型 anm:各向异性网络模型

药研猿的博客 1241

p15 装饰器设计模式:模拟咖啡

/** * p15 装饰器设计模式 *节点流:直接与数据源打交道(数组,文件), *处理流:装饰器设计模式 *装饰器设计模式 :面向对象; */ /** * 模拟咖啡 * 1抽象组件:需要安装的抽象对象(接口或者抽象父类) * 2具体组件:要装饰的对象 * 3抽象装饰类:包含了对抽象组件的引用以及装饰者共有的方法 * 4具体装饰类:被装饰的对象 * */ public c...

398

避坑指南:Qgis等时圈分析中ORS插件Key申请与参数设置的常见错误

本文详细解析了QGIS等时圈分析中ORS插件从API密钥申请到参数优化的全流程避坑指南。针对密钥激活、出行模式选择、时空参数设置等七个高频故障点,提供了实用的调试方案和优化技巧,帮助用户高效完成空间可达性分析。

weixin_42546508的博客 299

MacOS蓝牙连接疑难杂症:从基础排查到高级修复全攻略

本文提供了一份全面的MacOS蓝牙故障排查与修复指南。从基础的菜单栏检查、终端命令诊断,到软/硬重启蓝牙服务、删除配置文件,再到使用blueutil工具、重置NVRAM等高级方法,系统性地解决了蓝牙无法连接、连接不稳定等常见问题。最后还分享了环境干扰排查、预防措施及硬件故障自检方法,帮助用户彻底解决Mac蓝牙连接难题。

weixin_29271263的博客 450

装饰器设计模式:咖啡

/** * --装饰器设计模式 * 1.抽象组件:需要装饰的抽象对象(接口或抽象对象) * 2.具体组件:需要装饰的对象 * 3.抽象装饰类:包含对抽象组件的引用以及装饰者共有的方法 * 4.具体装饰类:被装饰的对象 * @author Administrator * */ public class DecorateTest02 { public static void mai...

weixin_43847681的博客 456

W5500 TCP服务器状态机详解:从SOCK_CLOSED到SOCK_ESTABLISHED的完整流程

本文深入解析W5500芯片作为TCP服务器时的状态机转换流程,从SOCK_CLOSED到SOCK_ESTABLISHED的完整链路实践。通过硬件协议栈架构分析、状态机全流程拆解及异常处理方案,帮助开发者构建高可靠性的嵌入式网络服务端,优化TCP连接性能与稳定性。

Jerry的专栏 1165

【Python-Day 41】揭秘函数的“魔法外衣”:一文彻底搞懂 Python 装饰器 (Decorator)

今天,我们将深入探讨一个 Python 中极其强大且富有魅力的特性——**装饰器 (Decorator)**。装饰器是 Python 函数式编程思想的杰出体现,它允许我们在不修改原函数代码的前提下,为其增加额外的功能。本文将从装饰器的基本概念、实现原理、语法糖 `@`,到 `functools.wraps` 的作用,再到带参数的装饰器和类装饰器等高级用法,为你构建一个完整而清晰的知识体系。通过本文,你将能彻底理解装饰器的工作机制,并学会在实际项目中灵活运用它来编写更优雅、更模块化的代码。

吴师兄大模型的博客 1978

使用lighttpd和开发板进行交互

本文介绍了如何在嵌入式开发板上使用Lighttpd Web服务器实现硬件交互功能。主要内容包括:Lighttpd通过CGI程序间接控制硬件的基本原理;lighttpd.conf配置文件的详细解析;开发板文件目录结构设计;用C语言编写控制GPIO的CGI程序示例;网页调用CGI实现按钮触发控制的HTML代码;常见问题调试建议。最后通过效果图展示了网页按钮点击后成功控制LED灯的实际效果,验证了Lighttpd+CGI方案在嵌入式设备Web控制中的可行性。

m0_49476241的博客 1423

从零搭建 C# + YOLO 工业视觉系统:从模型训练到上位机部署(工业级落地)

做工业质检、自动化生产线的同学都懂:一套能用的工业视觉系统,既要“检测准”,又要“界面易操作”,还要“部署稳”。之前帮某电子厂做PCB缺陷检测,一开始用Python+YOLO做检测核心,QT做上位机,结果踩了无数坑:Python推理速度波动大,QT和Python跨语言集成繁琐,数据传递容易卡顿;后来换成C# + YOLO的组合,直接打通了“模型训练-上位机开发-工业部署”全流程——C#的WinForms/WPF开发上位机高效,工业相机SDK支持完善;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 737

Python-day11:装饰器传参

装饰器传参

a13144125518的博客 643

【2026年阿里巴巴集团暑期实习- 4月25日-算法岗-第二题- 矩阵计数】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 给定两个非负整数序列a和b,构造n×m矩阵C,其中C[i][j]=a[i]×b[j]。统计矩阵中元素≥k的数量。解法是先对数组b排序,然后对于每个a[i],若k=0则直接累加m;若a[i]=0且k>0则跳过;否则计算需要的最小b[j]值,在排序后的b中使用二分查找确定满足条件的元素数量。时间复杂度为O((n+m)log m),空间复杂度O(1)。代码实现了排序和二分查找的高效组合。

m0_73659489的博客 65

23个设计模式一文搞懂

本笔记涵盖 23 种经典设计模式,按创建型、结构型、行为型三大类整理。每个模式配有生活类比、核心思想、结构图解、实现要点、真实应用案例、适用场景、优缺点分析及常见面试题。

weixin_72753562的博客 802

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python基础教程

Python快速入门课程,小白学完课程,您将学会自己写代码。

lsgzn的博客 304

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

定时任务只想跑一次怎么办?schedule.CancelJob自毁任务完全指南

**schedule** 是 Python 生态中最受欢迎的轻量级**定时任务调度器**,而 `schedule.CancelJob` 就是让任务"执行一次后自动销毁"的官方内置方案。本文用 5 个循序渐进的示例,教你用 Python 定时任务工具正确实现"只跑一次"的自毁任务,避开新手最常踩的 3 个坑。 ## 先搞清楚问题:周期任务为什么停不下来? 用 `pip install sched

gitblog_00342的博客 539

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

爆肝一个月,Python 从入门到精通

本文介绍了Python的安装与基础编程知识。Python是跨平台语言,可在Windows、Mac和Linux系统上运行。安装时应选择最新的Python 3.x版本,并确保勾选“Add Python to PATH”。文章详细说明了在不同操作系统下安装Python的方法,包括使用官方安装包或包管理器(如Scoop、Homebrew)。随后,介绍了Python解释器的基本功能,包括命令行交互环境和集成开发环境。文中还讲解了如何编写第一个程序,强调通过手动输入代码来培养编程感觉,并介绍了变量、数据类型、字符串编码

lw_zhang1101的博客 2040

QUANTAXIS QAFetch 数据获取模块实战指南:多数据源、全资产、统一接口的量化数据管道

QUANTAXIS 的 QAFetch 模块是其数据获取的统一入口,以一套 `QA_fetch_*` / `QA_fetch_get_*` 函数族覆盖股票、指数、期货、期权、加密货币、港股美股、财务数据等全资产类型,并支持 TDX(通达信)、Tushare、同花顺、东方财富、Baostock 等多个数据源自由切换。读完本文,你将掌握 QAFetch 的架构与调用约定,能够从 MongoDB 或原始

gitblog_00058的博客 880

Django框架整理

Django是一个功能强大的web框架。 前言:框架模式简介 1、MVC和MTV框架模式:分层级进行管理 说到框架模式我们有必要简单的说下设计模式,了解下设计模式这个概念,因为有人对设计模式和框架模式的概念经常混淆 设计模式: 是一套被反复使用,多数人知道并经过分类的代码设计经验总结,是为了解决一些通用性问题的 目的:重用代码并保证代码的可靠性 设计模式分类:单例,抽象工厂 等等 23种模式 一句话总结:解

有用的话关个注,点个赞,收个藏🫶。 1713

Flask+MySQL构建学生成绩课表管理系统:从需求到部署完整指南

Web开发框架是现代应用系统构建的基础工具,其中Flask作为轻量级Python框架,以其简洁灵活的特性受到开发者青睐。其核心原理是通过路由映射、请求处理和模板渲染实现业务逻辑。在教务管理系统开发中,Flask结合MySQL数据库能够高效处理学生成绩和课表管理等结构化数据。这种技术组合的价值在于快速构建可扩展的Web应用,特别适合教育机构内部部署。通过合理的数据库设计和权限控制,系统可以实现用户管理、课程安排、成绩录入等核心功能。在实际应用场景中,Flask+MySQL技术栈能够有效解决传统手工记录效率低下

weixin_33727510的博客 376

5分钟解锁金融数据自由:MOOTDX让通达信数据触手可及

你是否曾为获取股票行情数据而烦恼?商业接口收费高昂,免费API又复杂难用,数据延迟更是让人头疼。作为一名量化交易爱好者,你可能花了好几天时间研究各种数据接口,结果要么需要付费订阅,要么数据格式不兼容,要么连接不稳定——这样的经历是不是很熟悉? 今天,我要向你介绍一个改变游戏规则的工具:MOOTDX。这个开源项目让你能够免费、高效地获取通达信金融数据,就像打开了一扇通往金融数据宝库的大门。无论你是

gitblog_00692的博客 1122

Python通达信数据接口终极指南:3步实现金融数据自由获取

你是否曾经为了获取股票行情数据而四处寻找API,却总是遇到收费高昂、接口复杂的问题?想象一下,作为一名量化交易爱好者,你花了好几天时间研究各种数据接口,结果要么需要付费订阅,要么数据格式不兼容——这样的经历是不是很熟悉?今天,我要向你介绍一个改变游戏规则的Python金融数据工具:MOOTDX。这个开源项目让你能够免费、高效地获取通达信金融数据,就像打开了一扇通往金融数据宝库的大门。 ## 为什

gitblog_00307的博客 500

通达信数据接口终极指南:5分钟解锁免费金融数据自由

你是否曾为获取股票行情数据而烦恼?商业API收费昂贵、接口复杂、数据延迟严重,这些问题让个人投资者和量化交易新手望而却步。今天,我要向你介绍MOOTDX——一个让你5分钟内免费获取通达信金融数据的Python封装工具。无论你是金融研究者、量化交易爱好者,还是想要构建个人投资系统的开发者,MOOTDX都能为你打开金融数据宝库的大门。 ## 痛点分析:传统数据获取的三大困境 ### 成本高昂:个人

gitblog_00291的博客 308

Selenium PageFactory设计模式详解:原理、实现与自动化测试框架实战

在UI自动化测试领域,页面对象模型(Page Object Model)是一种核心设计模式,旨在将页面元素定位与操作逻辑封装成类,从而提升代码的可维护性和复用性。其核心原理是通过抽象层隔离测试脚本与页面结构,降低耦合度。然而,传统实现中,页面元素的初始化代码往往冗长且易错,这正是PageFactory设计模式要解决的技术痛点。PageFactory通过依赖注入和懒加载机制,允许开发者以声明式方式(如使用@FindBy注解)定义元素,框架在运行时自动完成WebElement的查找与注入,显著提升了工程实践效率

WGH100817的博客 450

Grok智能体后台模式配置与实战:自动化监控与任务调度

AI智能体的后台运行模式是现代自动化系统的核心技术之一,其原理基于持续的任务调度和无人工干预的自主执行。在工程实践中,这种模式通过定时任务调度器和系统监控机制实现,能够显著提升系统的自动化程度和运维效率。Grok智能体作为新兴的AI工具,其后台模式特别适用于系统监控、定时数据处理和智能客服等场景。通过合理的API调用优化和资源管理策略,开发者可以构建稳定的后台服务,实现7×24小时的智能监控与自动化任务处理。本文以Grok智能体为例,详细介绍了后台模式的配置方法、核心架构设计以及在实际项目中的部署实践,为开

weixin_33675507的博客 490

基于Python和Vue的教务信息管理系统开发全流程复盘

教务管理系统是培训机构数字化转型的核心工具,其本质是业务流、数据流与权限流的数字化重构。从排课冲突检测、剩余课时核算到多角色权限控制,系统设计需覆盖报名、排课、考勤、课消、续费完整闭环。本文基于Flask与Vue 3的前后端分离架构,详解教务系统的数据库模型设计、API权限认证、课消流水状态机等关键工程实践,并分享Nginx+Gunicorn部署及真实运营中的优化经验。这套方案适用于中小型培训机构,也适合开发者快速上手Python+Vue全栈项目。

weixin_33843947的博客 272
上一篇: 哈希表(Hash Table)day05
下一篇: 结构型——组合模式(Composite)day10
哆唻咪à
博客等级 码龄9年 0粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值