Java设计模式之外观、享元、组合模式《三国争霸:模式风云录》
第一章:乱世起(外观初现)
黄巾余孽张角三兄弟操控"混沌子系统",各地流民不堪996劳役。观国隐士诸葛孔明出山,在博望坡构建首个"军师智脑":
/*** 外观模式:军师智脑系统(简化复杂子系统调用)*/
class StrategyFacade {// 子系统1:军事指挥系统private ArmySystem army = new ArmySystem();// 子系统2:后勤保障系统private LogisticsSystem logistics = new LogisticsSystem();// 子系统3:情报信息系统private IntelSystem intel = new IntelSystem();/*** 统一战略部署接口* @param plan 作战计划名称*/public void deployStrategy(String plan) {System.out.println("【观国军师系统启动】");intel.collectInfo(); // 收集情报logistics.allocateResources(); // 调配资源army.execute(plan); // 执行作战}
}// 子系统实现类
class ArmySystem {public void execute(String plan) {System.out.println("执行「" + plan + "」作战方案");}
}class LogisticsSystem {public void allocateResources() {System.out.println("调配粮草、装备等战略物资");}
}class IntelSystem {public void collectInfo() {System.out.println("通过间谍网收集敌军情报");}
}
// main函数使用示例
"从此调兵遣将,如臂使指!"诸葛羽扇轻挥,三千流民经外观封装,竟成虎狼之师。
第二章:元国兴(享元破局)
兖州曹营,郭嘉破解《真经·享元篇》。十万青州兵装备玄铁重甲,每副甲胄却仅耗三成资源:
import java.util.*;/*** 享元模式:玄甲军备共享池(重用大量相似对象)*/
class ArmorFlyweight {// 内在状态(共享不变部分)private String material = "玄铁";private String pattern = "饕餮纹";/*** 部署装甲(外在状态由外部指定)* @param pos 部署坐标*/public void deploy(Coordinate pos) {System.out.println("在("+pos.x+","+pos.y+")部署" + material + pattern + "装甲");}
}/*** 装甲工厂(管理共享池)*/
class ArmorFactory {private static Map<String, ArmorFlyweight> pool = new HashMap<>();/*** 获取装甲实例* @param key 装甲类型*/public static ArmorFlyweight getArmor(String key) {if(!pool.containsKey(key)) {System.out.println("创建新型号装甲:" + key);pool.put(key, new ArmorFlyweight());}return pool.get(key);}
}// 坐标类(外在状态)
class Coordinate {int x, y;public Coordinate(int x, int y) {this.x = x;this.y = y;}
}
官渡战场,袁绍五十万大军被共享装甲洪流吞没。"吾以十万甲,破百万兵!"曹操剑指江北。
第三章:合国立(组合擎天)
长江之畔,周郎观曹军艨艟战舰,悟出组合真谛:
import java.util.*;/*** 组合模式:舰队作战体系(树形结构管理)*/
interface MilitaryUnit {void deploy(); // 部署命令
}/*** 叶子节点:单艘战船*/
class Warship implements MilitaryUnit {public void deploy() { System.out.println("楼船进入战斗位置"); }
}/*** 组合容器:舰队编队*/
class FleetComposite implements MilitaryUnit {private List<MilitaryUnit> units = new ArrayList<>();/*** 添加作战单元*/public void addUnit(MilitaryUnit unit) {units.add(unit);}/*** 递归部署整个编队*/public void deploy() {System.out.println("【舰队展开战斗队形】");units.forEach(MilitaryUnit::deploy);}
}
赤壁火起时,东吴舰队如魔方般重组变换。黄盖旗舰化作组合根节点,火船集群为叶节点,竟将曹军铁索连舟烧作飞灰。
第四章:三分定(模式对决)
汉中之战,三国精锐尽出:
1.观国【为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用】
public class GuanMain {public static void main(String[] args) {StrategyFacade zhuge = new StrategyFacade();// 调用统一接口执行作战zhuge.deployStrategy("火烧新野");}
}
# 输出:
# 【观国军师系统启动】
# 通过间谍网收集敌军情报
# 调配粮草、装备等战略物资
# 执行「火烧新野」作战方案
2. 元国【主要用于减少创建对象的数量,以减少内存占用和提高性能。它通过共享已经存在的对象来避免创建过多的相似对象】
// main函数使用示例
public class YuanMain {public static void main(String[] args) {// 模拟在三个位置部署同型装甲String armorType = "虎豹骑专用甲";// 获取共享装甲实例ArmorFlyweight armor1 = ArmorFactory.getArmor(armorType);ArmorFlyweight armor2 = ArmorFactory.getArmor(armorType);// 部署到不同位置(传递外在状态)armor1.deploy(new Coordinate(10, 20));armor2.deploy(new Coordinate(30, 40));System.out.println("装甲实例是否相同:" + (armor1 == armor2));}
}
# 输出:
# 创建新型号装甲:虎豹骑专用甲
# 在(10,20)部署玄铁饕餮纹装甲
# 在(30,40)部署玄铁饕餮纹装甲
# 装甲实例是否相同:true
3.合国 【将对象组合成树形结构以表示 “部分 - 整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性】
// main函数使用示例
public class HeMain {public static void main(String[] args) {// 创建舰队FleetComposite fleet = new FleetComposite();// 添加作战单元fleet.addUnit(new Warship());fleet.addUnit(new Warship());// 创建子编队FleetComposite subFleet = new FleetComposite();subFleet.addUnit(new Warship());fleet.addUnit(subFleet);// 执行整体部署fleet.deploy();}
}
# 输出:
# 【舰队展开战斗队形】
# 楼船进入战斗位置
# 楼船进入战斗位置
# 【舰队展开战斗队形】
# 楼船进入战斗位置
终章:归晋(模式融合)
司马懿观三家战法,在五丈原顿悟模式融合
"所谓模式,分则亡,合则昌!"当洛阳城头升起"晋"字大旗,三大模式终融为《设计真经》终极奥义——架构之道。
相关文章:
Java设计模式之外观、享元、组合模式《三国争霸:模式风云录》
第一章:乱世起(外观初现) 黄巾余孽张角三兄弟操控"混沌子系统",各地流民不堪996劳役。观国隐士诸葛孔明出山,在博望坡构建首个"军师智脑": /*** 外观模式:军师智…...
设计模式之解释器模式:原理、实现与应用
引言 解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的文法表示,并提供一个解释器来解释该语言中的句子。解释器模式适用于需要解析特定语法规则的场景,如正则表达式、SQL解析等。本文将深入…...
redis itheima
缓存问题 核心是如何避免大量请求到达数据库 缓存穿透 既不存在于 redis,也不存在于 mysql 的key,被重复请求 public Result queryById(Long id) {String key CACHE_SHOP_KEYid;// 1. redis & mysqlString shopJson stringRedisTemplate.opsFo…...
AF3 OpenFoldDataModule类setup方法解读
AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类 setup 方法用于设置数据集的关键部分,负责根据不同的模式(训练、验证或预测)生成和初始化相应的数据集。 源代码: def setup(self, stage=None):# Most of the arguments are the same for the three datasets data…...
服务器报错:xxx/libc.so.6: version `GLIBC_2.32‘ not found
/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found (required by ./aima-sim-app-main) 解决思路 根据错误信息,您的应用程序 aima-sim-app-main 和 libmujoco.so.3.1.6 库依赖于较新的 GNU C Library (glibc) 版本(如 GLIBC_2.32, GLIBC…...
FPGA状态机设计:流水灯实现、Modelsim仿真、HDLBits练习
一、状态机思想 1.概念 状态机(Finite State Machine, FSM)是计算机科学和工程领域中的一种抽象模型,用于描述系统在不同状态之间的转换逻辑。其核心思想是将复杂的行为拆解为有限的状态,并通过事件触发状态间的转移。 2.状态机…...
机试题——最少乘坐公交次数
题目描述 春节将近,小明想在节日期间逛一逛城里的 ( N ) 个著名景点。所有景点都能通过坐公交到达。需要设计一种公交路线方案,让小明能最快地逛完所有景点。 输入描述 第一行:一个整数 ( N ),表示景点数量,满足 ( …...
防孤岛保护装置在分布式光伏并网中的应用
什么是光伏的“孤岛效应” 孤岛islanding 包含负荷和电源的部分电网,从主网脱离后继续孤立运行的状态。孤岛可分为非计划性孤岛和计划性孤岛。 孤岛效应的危害 当电网侧停电检修,若并网光伏电站的逆变器仍在继续供电,维修人员不一定…...
记一次gitlab服务器负载过高问题处理
服务器上进程 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru 进程服务器cpu占用过高应该怎么处理 tail -f /var/log/gitlab/gitlab-rails/production.log调整 Unicorn 配置:unicorn.rb 是 Unicorn 服务器的配…...
LiT and Lean: Distilling Listwise Rerankers intoEncoder-Decoder Models
文章:ECIR 2025会议 一、动机 背景:利用LLMs强大的能力,将一个查询(query)和一组候选段落作为输入,整体考虑这些段落的相关性,并对它们进行排序。 先前的研究基础上进行扩展 [14,15],…...
【项目日记】高并发服务器项目总结
生活总是让我们遍体鳞伤, 但到后来, 那些受伤的地方一定会变成我们最强壮的地方。 -- 《老人与海》-- 高并发服务器项目总结 模块关系图项目工具模块缓冲区模块通用类型模块套接字socket模块信道Channel模块多路转接Poller模块 Reactor模块时间轮Tim…...
P1332 血色先锋队(BFS)
题目背景 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物。孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重包围,现在他们将主力只好聚集了起来,以抵…...
systemd 与 SysVinit
1. 什么是 systemd 和 SysVinit? systemd 和 SysVinit 都是 Linux 的初始化系统(init system),用于管理系统启动、服务、进程和日志。 比较项SysVinitsystemd启动方式逐步启动(串行)并行启动(…...
PythonWeb项目-Django+vue白酒数据推荐系统功能介绍
❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目源…...
AWS Bedrock:开启企业级生成式AI的钥匙【深度解析】
引言:生成式AI的工业革命需要新基建 根据Gartner预测,到2026年超过80%的企业将在生产环境中部署生成式AI。而AWS Bedrock作为首个企业级生成式AI托管平台,正在重塑AI工业化落地的技术范式。本文将深入解构其技术架构与商业价值。 一、Bedroc…...
网络安全应急响应-文件痕迹排查
在Windows系统的网络安全应急响应中,文件痕迹排查是识别攻击行为的关键步骤。以下是针对敏感目录的详细排查指南及扩展建议: 1. 临时目录排查(Temp/Tmp) 路径示例: C:\Windows\TempC:\Users\<用户名>\AppData\L…...
【玩转全栈】—— Django 连接 vue3 保姆级教程,前后端分离式项目2025年4月最新!!!
本文基于之前的一个旅游网站,实现 Django 连接 vue3,使 vue3 能携带 CSRF Token 发送 axios 请求给后端,后端再响应数据给前端。想要源码直接滑倒底部。 目录 实现效果 解决跨域 获取 csrf-token 什么是 csrf-token ? CSRF攻击的…...
网络安全·第一天·IP协议安全分析
本篇博客讲述的是网络安全中一些协议缺陷以及相应的理论知识,本博主尽可能讲明白其中的一些原理以及对应的防卫措施。 学习考研408的同学也能进来看看,或许对考研有些许帮助(按照考研现在的趋势,年年都有新题目,本文当…...
TensorFlow深度学习实战——字符嵌入、子词嵌入、句子嵌入和段落嵌入
TensorFlow深度学习实战——字符嵌入、子词嵌入、句子嵌入和段落嵌入 0. 前言1. 字符嵌入2. 字词嵌入3. 句子嵌入和段落嵌入相关链接 0. 前言 在自然语言处理中,嵌入 (Embedding) 技术是将文本转化为数值向量的核心方法,使计算机能够理解和处理语言中的…...
剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡
剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡 在当今科技飞速发展的时代,AI与5G无疑是两大备受瞩目的焦点。近日,一个引人深思的问题浮出水面:“AI是不是被夸大了,就像当年的5G一样…...
Python Cookbook-5.7 在增加元素时保持序列的顺序
任务 你需要维护一个序列,这个序列不断地有新元素加入,但始终处于排序完毕的状态这样你可以在任何需要的时候检查或者删除当前序列中最小的元素。 解决方案 假设有一个未排序的列表,比如: the_list [903, 10, 35, 69, 933, 485, 519, 37…...
Ubuntu18系统安装
1、虚拟机安装 请参照之前的《虚拟机安装centos7-NAT网络模式安装》与《虚拟机安装centos7-桥接模式》 2、启动虚拟机进入系统的欢迎界面 选择English后并点击回车键(Enter) 3、进入安装页面 选择Countinue without updating并点击回车键(Enter) 4、键盘配置 选择Done并点击…...
【AIGC】零样本学习方法综述(TPAMI 2023 研究综述)
出版日期为2022年7月18日;工作由国家自然科学基金资助6217616年6061732011和61976141,部分由广东基础和应用基础研究基金资助2022A1515010791,部分由深圳大学自然科学基金会稳定支持计划资助号20200804193857002,部分由SZU的跨学科…...
Redis持久化之AOF
AOF(Append Only File)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用解决了数据持久化的实时性。 1.使用AOF 开启AOF需要设置配置文件: appendonly yes…...
QT6(12)3.3.1 Qt元对象系统概述:QObject 类与 QMetaObject 类,类型转换 qobject_cast<T>()。
(33)Qt元对象系统概述: QObject 类: 以及: 老师带咱们学生测试一下: 谢谢老师 (34)类型转换 qobject_cast( ) : 来自 一言的教导: (35&#x…...
Electron使用WebAssembly实现CRC-32 STM32校验
Electron使用WebAssembly实现CRC-32 STM32校验 将C/C语言代码,经由WebAssembly编译为库函数,可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-32 STM32格式校验的方式。 CRC-32 STM32校验函数WebAssembly源文件 C语言实…...
C++11QT复习 (十五)
文章目录 Day10 标准模板库学习笔记(2025.04.02)一、函数和数组能否放入 STL 容器?1. 引用不能直接作为容器元素类型✅ 推荐做法:使用 std::reference_wrapper<T> 2. 函数不能直接作为容器元素类型✅ 推荐做法一:…...
文件存储的路径简单分析
filename file_pic.filename pic /static/img/filename # 将文件的名称存储在数据库中,方便调取 p_file os.path.join(/home/enen/ee/static/img, filename) file_pic.save(p_file) # 保存文件到指定目录,具体项目是要根据项目的存储地址来看的…...
汽车与航空航天领域软件维护:深度剖析与未来展望
一、引言 在当今科技飞速发展的时代,汽车和航空航天领域的软件应用愈发广泛和深入,软件已成为这些行业系统的核心组成部分。从汽车的智能驾驶辅助系统到航空航天飞行器的飞行控制软件,软件的可靠性、安全性直接关系到整个系统的正常运行和人…...
吉利汽车采用 EMQX 与AutoMQ联合方案构建公私有云一体化的车联网核心架构
吉利汽车集团 数字化基础架构总工程师 洪旅杭 关于吉利汽车 吉利汽车集团在中国上海、宁波、以及海外等地建有造型设计和工程研发中心,研发实力雄厚。在中国、马来西亚建有世界一流的现代化整车和动力总成制造工厂,拥有各类销售网点超过 1400 多家&…...
深圳漫云科技户外公园实景儿童剧本杀小程序:开启亲子互动新纪元
在亲子娱乐需求日益增长的当下,深圳漫云科技推出的户外公园实景儿童剧本杀小程序,凭借其创新玩法与丰富功能,为亲子家庭带来全新体验。该小程序融合户外探险、角色扮演与逻辑推理,不仅满足孩子好奇心,更提升其思维能力…...
如何实现H5端对接钉钉登录并优雅扩展其他平台
如何实现H5端对接钉钉登录并优雅扩展其他平台 钉钉H5登录逻辑后端代码如何实现?本次采用策略模式工厂方式进行定义接口确定会使用的基本鉴权步骤具体逻辑类进行实现采用注册表模式(Registry Pattern)抽象工厂进行基本逻辑定义具体工厂进行对接…...
借助 AI 工具使用 Python 实现北京市店铺分布地理信息可视化教程
一、项目概述 本项目通过 Python 的pyecharts库,结合 AI 工具辅助代码编写与逻辑梳理,实现北京市店铺数量分布及区域连线的地理信息可视化,最终生成交互式地图图表。 二、准备工作 1. 环境与工具 Python 环境:确保已安装 Pyth…...
如何选择优质的安全工具柜:材质、结构与功能的考量
在工业生产和实验室环境中,安全工具柜是必不可少的设备。它不仅承担着工具的存储任务,还直接影响工作环境的安全和效率。那么,如何选择一个优质的安全工具柜呢?关键在于对材质、结构和功能的考量。 01材质:耐用与防腐 …...
使用Vue、Nodejs以及websocket搭建一个简易聊天室
简易聊天室 说在前面效果展示websocketwebsocket的由来websocket的特点 vue前端静态结构效果代码 点击切换用户以及该用户高亮实现思路效果展示 发送消息功能效果展示 连接服务端 Nodejs服务器端实现步骤代码 说在前面 在学习计算机网络的时候,看到了websocket这个…...
node.js使用pnpm运行时报错“Command failed with exit code 1.“怎么办
目录 遇到的问题 问题排查 遇到的问题 在使用pnpm dev运行时报错"Command failed with exit code 1." 如图 问题排查 是先使用pnpm install指令进行安装 然后使用pnpm dev,出现的问题 查看版本号node 发现是版本号高了 将node_modules文件夹删除 通…...
从GPU加速到深度学习革命 —— AlexNet论文概述
广泛认为,将显卡(GPU)用于深度学习模型训练这一突破性发现,主要归功于2012年发表的经典论文《ImageNet Classification with Deep Convolutional Neural Networks》。在这篇论文中,Alex Krizhevsky、Ilya Sutskever 和…...
视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析
一、方案背景 某电动车企业不停爆出维权新闻,支持和反对的声音此起彼伏,事情不断发酵、反转,每天都有新消息,令人目不暇接。车展、车店作为维权事件的高发场所,事后复盘和责任认定时,安防监控和视频监控平…...
Python•判断循环
ʕ⸝⸝⸝˙Ⱉ˙ʔ ♡ 判断🍰常用的判断符号(比较运算符)andor括号notin 和 not inif-elif-else循环🍭计数循环 forrange()函数简易倒计时enumerate()函数zip()函数遍历列表遍历元组遍历字符串遍历字典条件循环 while提前跳转 continue跳出循环 break能量站😚判断🍰 …...
导入python包模块时报错Segmentation fault (core dumped)的解决思路
一、问题概述 有时候我们在Linux环境下执行代码时,会莫名奇妙出现Segmentation fault (core dumped)这个报错,很难定位到问题,就算定位到了,如果发现是导包的问题,也很难判断。所以记录下相关解决方式,以待…...
tcp转串口
windows 在 Windows 系统上,可以使用以下成熟的串口转 TCP 工具: HW VSP3 (HW Virtual Serial Port) 提供串口到 TCP/IP 的映射功能。支持虚拟串口和网络通信。下载地址:HW Group com0com com2tcp 开源工具,支持虚拟串口和 TCP…...
杂谈:抖音双塔召回模型:亿级内容分发的数学魔法
在信息爆炸的数字时代,我们每天都被海量内容包围。以抖音为例,这个日活跃用户数亿的平台,每分钟就有数以万计的新视频上传。面对如此庞大的内容库,一个核心问题自然浮现:系统如何从这浩瀚的内容海洋中,为每…...
Set 集合
默认情况下, Scala 使用的是不可变集合, 如果你想使用可变集合, 需要引用 scala.collection.mutable.Set Set 默认是不可变集合,数据无序 数据不可重复 遍历集合 创建可变集合 mutable.Set 打印集合 集合添加元素 向集合中…...
青蛙吃虫--dp
1.dp数组有关元素--路长和次数 2.递推公式 3.遍历顺序--最终影响的是路长,在外面 其次次数遍历,即这次路长所有情况都更新 最后,遍历次数自然就要遍历跳长 4.max时时更新 dp版本 #include<bits/stdc.h> using namespace std; #def…...
加油站小程序实战教程08用户注册
目录 1 授权手机号2 前端调用API总结 上一篇我们介绍了小程序的登录功能,当用户未注册的时候,点击自动加油按钮会弹出授权手机号,然后进行注册,本篇我们介绍一下用户注册的开发过程。 1 授权手机号 微搭提供了小程序手机号获取的…...
进程内存分布--之showmap呈现memory-layout.cpp内存分布
上一篇我们讲了:进程内存分布--之pmap呈现memory-layout.cpp内存分布 我们这里讲一个用于分析内存占用的更直观的方式,showmap来看看会是什么呈现效果: 我们再来使用showmap命令来看下它是怎么呈现内存分布的: 可以看到showmap…...
vim/vi程序(1)
今天我们来学习一下一个编辑器,vim(vi是以前的版本),这个是linux常用的编辑器,我们是必须要学习滴,来看. 各种模式示意图: 案例: vim aaa.txt 按i进入编辑模式,此时可以输入 按ESC可以退出 :进入命令模式 输入wq保存并退出 今天大家先简单了解一下基础…...
【Python】案例:计算股票收益率和波动率
【Python】案例:计算股票收益率和波动率: 1、案例需求2、数据准备3、案例实现 1、案例需求 在分析股票数据时,我们需要从这些数据中得到一些关键指标进行评估,比如收益率、波动率,其中收益率又可以细分为简单收益率和…...
从云计算到算网融合:未来已来的算力革命
一、算力网络:重塑数字时代的基础设施 在当今的数字世界,我们似乎已习惯了云计算带来的便利。然而,随着技术的飞速发展,一种全新的架构 —— 算力网络,正悄然崛起,有望彻底改变我们对计算资源的认知和利用…...
高级:消息队列面试题精讲
一、引言 消息队列在现代软件架构中扮演着至关重要的角色,尤其在处理高并发、系统解耦和异步通信等场景下。Kafka 和 RabbitMQ 作为两种主流的消息队列技术,各自具有独特的特性和适用场景。本文将深入分析 Kafka 和 RabbitMQ 的原理、使用场景及相关面试…...