游戏中的设计模式——第三篇 简单工厂模式

5. 简单工厂模式

5.1 简单工厂模式的定义

简单工厂模式的核心是定义一个创建对象的接口,将对象的创建和本身的业务逻辑分离,降低系统的耦合度,使得两个修改起来相对容易些,当以后实现改变时,只需要修改工厂类即可。

5.2 简单工厂模式的作用

用户不需要知道所有工厂方法的实现,只需要根据自己的需求,把需求告诉工厂类,工厂直接进行生产,将用户和生产隔离开。

5.3 例子

同样以鸣潮卡池为例,当我们打开换取页面的时候,会打开抽卡页面,在这个页面里面有一列按钮,分别对应着不同的卡池,而这个卡池可以看作我们的工厂产品。(首先声明,鸣潮不同卡池除了图片不同,页面好像是相同的UI,但是我们为了举例形象就当作是不同的UI)。
突然想到其实例子是对的,因为鸣潮卡池UP池和普池是不一样的,武器普池可以自选。(现实中为了考虑方便和资源包体的大小,大概率是动态生成一个按钮绑定事件,这里我们假设是不同的ui资源页面方便理解)
在这里插入图片描述
那么开始实现一个卡池切换创建出不同的卡池页面的简单工厂:

using UnityEngine;
using UnityEngine.Video;// 枚举页签类型
public enum EnumPageNodeType
{Up,Normal,// 其他类型
}public interface IPageNode
{void OnClickGachaBtn(GameObject obj);
}public abstract class AbstractPageNode : IPageNode
{protected VideoPlayer video;protected Button gachaBtn;public abstract void OnClickGachaBtn(GameObject obj);
}// 限定奖池页签
public class UpGachaPageNode : AbstractPageNode
{protected VideoPlayer video;protected Button gachaBtn;public override void OnClickGachaBtn(GameObject obj){// 抽卡}
}// 普通奖池页签
public class NormalGachaPageNode : AbstractPageNode
{protected VideoPlayer video;protected Button gachaBtn;protected Button selectBtn;public override void OnClickGachaBtn(GameObject obj){// 抽卡}public void OnClickSelectBtn(GameObject obj){// 打开选择目标五星页面}
}// 抽卡页签工厂
public class CtreatGachaPageNodeSimpleFactory
{private static CtreatGachaPageNodeSimpleFactory instance;public static CtreatGachaPageNodeSimpleFactory Instance{get{if(instance == null)instance = new CtreatGachaPageNodeSimpleFactory();return instance;}}public AbstractPageNode CreatePageNode(EnumPageNodeType nodeType, GameObject node){AbstractPageNode uiNode = null;switch (nodeType){case EnumPageNodeType.Normal:uiNode = node.Make<NormalGachaPageNode>();break;case EnumPageNodeType.Up:uiNode = node.Make<UpGachaPageNode>();break;default:break;}return uiNode;}
}

至此,我们利用简单工厂模式制作了一个动态创建抽卡活动下子页签的功能。图中示例仅供参考,实际开发中使用什么方式去实现对应功能需要具体分析。

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

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

相关文章

基于SVN搭建企业内部知识库系统实践

一、准备工作 CentOS 7 服务器&#xff1a;确保你有 root 或 sudo 权限&#xff0c;可以访问该服务器。Windows 客户端&#xff1a;你将需要在 Windows 上安装 TortoiseSVN 客户端来与 SVN 服务器交互。防火墙&#xff1a;确保你的防火墙已开放 3690 端口&#xff0c;用于 SVN…

SQL注入7----(盲注与回显)

一.前言 在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办&#xff1f;例如应用程序就会返回 一个"通用的"的页面&#xff0c;或者重定向一个通用页面&#xff08;可能为网站首页&#xff09;。这时&#xff0c;我们之前学习的SQL注入办 法就…

尚硅谷宋红康JVM全套教程(详解java虚拟机)

https://www.bilibili.com/opus/1071553679925968898 案例7&#xff1a;日均百万订单系统JVM参数设置 https://github.com/wei198621/jvm_by_atguigu https://github.com/xftxyz2001/atguigu-jvm/blob/main/JavaYouthdocsJVM/%E7%AC%AC1%E7%AB%A0-JVM%E4%B8%8EJava%E4%BD%…

鸿蒙NEXT开发实战:图片显示、几何图形与自定义绘制详解

探索HarmonyOS NEXT强大的图形渲染能力&#xff0c;从图片展示到自定义绘图 HarmonyOS NEXT作为华为自主研发的操作系统&#xff0c;为开发者提供了一套丰富而强大的图形渲染能力。无论是显示图片、绘制几何图形&#xff0c;还是实现复杂的自定义绘图&#xff0c;鸿蒙都提供了简…

python + Flask模块学习 2 接收用户请求并返回json数据

用到的模块还是flask&#xff0c;用到的类有Flask&#xff0c; request&#xff0c; jsonfiy &#x1f642; 目录 1、GET请求 2、POST请求 1、表单格式 2、json格式 就酱&#xff0c;也比较简单&#xff0c;下一篇说简单的授权&#xff0c;简单来说就是比如用户付费买了服…

国内外常用的免费BUG管理工具选型

帮助用户根据自身情况做决定&#xff0c;比如团队规模、技术能力、是否需要移动端支持等。避免只是罗列工具&#xff0c;而是提供实际选择的维度。 国内外常用的免费BUG管理工具选择非常丰富&#xff0c;从轻量级到功能全面型都有覆盖。我将它们分为几类&#xff0c;并详细介绍…

JavaScript的事件循环机制

1.事件循环的理解JavaScript是单线程的&#xff0c;意味着它一次只能执行一个任务。而事件循环就是去协调在JavaScript环境中运行的同步任务、异步任务(微任务、宏任务)的执行顺序的一种机制。它是 JavaScript 实现单线程非阻塞异步执行的核心。2.事件循环的执行顺序同步任务—…

数据结构——栈(Java)

目录 一定义. 入栈 出栈 二.栈与线性表的关系 三.栈的实现方式 四.链表实现栈 1.结点的API设计 2.栈的API设计 2.1栈的初始化设计 2.2元素入栈 2.3元素出栈 五.括号匹配问题 完整代码展示 答案 一定义. 栈是一种基于先进后出&#xff08;FILO&#xff09;的数据…

科研笔记:数学建模启发的课题研究方法

借鉴数学建模的思路解决科学问题或开展课题研究&#xff0c;核心是将实际问题抽象为数学框架&#xff0c;通过定量分析、逻辑推演和验证优化&#xff0c;实现对问题的精准描述、解释或预测。其本质是“从现实到数学&#xff0c;再从数学回归现实”的迭代过程&#xff0c;适用于…

Agent落地到底选择LangChain 还是 LangGraph

核心概念 LangChain:一个用于构建由大型语言模型驱动的应用程序的框架。它提供了大量的组件和现成的链,旨在简化和标准化应用程序与LLM交互的过程。 LangGraph:一个用于在LangChain之上构建有状态、多参与者的 工作流 的库。它特别擅长处理具有循环、分支和复杂协调的代理(…

ChatGPT下的相关聊天提示词

问&#xff1a;如果我觉得一个子对话里&#xff0c;聊天聊得太多&#xff0c;在这个项目下新开一个子对话&#xff0c;但是不想把上次太多的信息 都复制过来&#xff0c;有没有什么办法关键词&#xff1a;项目、子对话&#xff0c;上下文ChatGPT:有办法的 ✅在 ChatGPT 里&…

最新PDF版本!Acrobat Pro DC 2025,解压即用版

软件介绍 Adobe Acrobat Pro DC 2025 是全球知名的 PDF 编辑神器&#xff0c;被称为 “最牛 PDF 工具”&#xff0c;能轻松解决 PDF 编辑、创建、转换等难题&#xff0c;本次分享的版本解压即可使用。 软件特点 然解压即可使用不用登录注册最新版本 软件使用 我们打开软件选…

XX汽集团数字化转型:全生命周期网络安全、数据合规与AI工业物联网融合实践

引言&#xff1a;数字化转型中的安全与效率双轮驱动作为中国汽车行业的龙头企业&#xff0c;XX汽集团近年来积极推进数字化转型&#xff0c;通过构建全生命周期网络安全体系、完善数据合规治理框架&#xff0c;并深度融合AI工业物联网技术&#xff0c;实现了生产成本显著降低和…

云原生部署_Docker入门

Docker是啥Docker是一个开源的容器化平台&#xff0c;可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器。Docker的主要目标是通过容器化技术&#xff0c;实现应用程序的快速部署、可移植性和可扩展性&#xff0c;从而简化应用程序的开发、测试和部署过程…

【大数据专栏】大数据框架-Apache Druid Overview

目录 Architecture Advantages and disadvantages 从架构以及设计可以得出结论&#xff0c;Durid不支持ACID事务&#xff0c;基于时间戳列和维度列去查询&#xff0c;所以适合基于时间做分组和学列的查询操作。 Advantages优势&#xff1a; 实时数据摄取与查询 支持秒级数据摄…

云平台面试内容(一)

1. 云计算的优点、服务模型区别及云部署模式 云计算优点: 云计算具有显著的优势,包括无需自建机房和硬件投入,资源即开即用并支持弹性伸缩,按需付费使成本透明可控。企业可以在数分钟内完成全球范围的部署,缩短上线周期。同时云平台提供高可用性和安全性,多副本容灾保证数…

嵌入式 - 硬件:51单片机(2)

本节重点&#xff1a;1. GPIO输入模式、输出模式2. 按键工作原理&#xff08;GPIO输入&#xff09;3. 中断概念4. 中断源概念、中断源个数、哪几个中断源5. 外部中断、定时器中断概念6. 中断处理流程&#xff1a;7. 51单片机中定时器的个数&#xff1f;类型8. 16位定时器和8位…

C语言中奇技淫巧07-使用GCC栈保护选项检测程序栈溢出

-fstack-protector 是 GCC 和 Clang 编译器提供的一种栈保护&#xff08;Stack Smashing Protection, SSP&#xff09; 机制&#xff0c;用于检测和防御常见的缓冲区溢出攻击&#xff08;特别是栈溢出&#xff09;。它通过在函数的栈帧中插入特殊的“金丝雀值”&#xff08;can…

.NET 8.0 Web API JWT 身份验证和基于角色的授权

在当今的数字环境中&#xff0c;保护 Web 应用程序的安全至关重要。随着 .NET 8.0 的不断发展&#xff0c;它提供了强大的工具来确保您的 API 既安全又高效。 示例代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/91490262 如果您喜欢此文章&#xff0c…

ZYNQ SDK软件在线调试

1、然后右键项目->debug as->launch on hardware2、从左到右分别是&#xff1a;运行程序到设置的断点暂停运行终止断开连接步进&#xff08;进入函数内部&#xff09;跳过&#xff08;不进入函数内部&#xff09;跳出函数3、双击添加断点&#xff0c;然后点击运行可以让程…