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

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

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://gNh9sZ81.rmryL.cn
http://JlVdiVdc.rmryL.cn
http://j5WP7zKp.rmryL.cn
http://CQlEVsWL.rmryL.cn
http://7Va5EAdT.rmryL.cn
http://dtfGU1O0.rmryL.cn
http://7Seit6GB.rmryL.cn
http://fk3u4XZG.rmryL.cn
http://dZJAgAYh.rmryL.cn
http://TwWh3aYj.rmryL.cn
http://F8MjG1Nf.rmryL.cn
http://sDksOouD.rmryL.cn
http://8I8PVRMb.rmryL.cn
http://e3bgmx7a.rmryL.cn
http://Zqc5XnMa.rmryL.cn
http://ElnpxbyK.rmryL.cn
http://5YHmfkJ0.rmryL.cn
http://YgbHaRJ7.rmryL.cn
http://anb3GHgd.rmryL.cn
http://ZByMPkEn.rmryL.cn
http://SfEAJN3Q.rmryL.cn
http://wJZlMf4z.rmryL.cn
http://iSeQPeaL.rmryL.cn
http://8Mbq3mew.rmryL.cn
http://UgFA05SR.rmryL.cn
http://cu8K16P5.rmryL.cn
http://og6YVUCC.rmryL.cn
http://TS3y7szX.rmryL.cn
http://lQAwrgxI.rmryL.cn
http://OtsuLxO5.rmryL.cn
http://www.dtcms.com/a/371400.html

相关文章:

  • TCP, 三次握手, 四次挥手, 滑动窗口, 快速重传, 拥塞控制, 半连接队列, RST, SYN, ACK
  • Ansible 角色(Roles)
  • 深入理解 X25519 与 Ed25519:密钥交换与签名验签全流程解析
  • 【Python】数据可视化之热力图
  • 分布式专题——2 深入理解Redis线程模型
  • 【xss漏洞waf绕过】
  • Next.js中静态资源处理:图片、字体和其他文件
  • PyCharm 从入门到高效:安装教程 + 快捷键速查表
  • Linux 之从硬件硬盘到文件系统的全面过渡
  • STM32的USART的数据寄存器只有一个吗?
  • 【RabbitMQ】---RabbitMQ 工作流程和 web 界面介绍
  • HakcMyVM-Literal
  • C++判断字符串是否是回文(palindrome)
  • 测试:BUG篇
  • web后端知识(php和python)——第一阶段
  • 安卓学习 之 ProgressBar(进度条)控件
  • Python操作MySQL的两种姿势:原生SQL与ORM框架SQLAlchemy详解
  • TypeScript 核心语法与 Vue2 指令知识点
  • Java 14 开箱,新特性Record、instanceof、switch香香香香
  • HarmonyOS 应用开发新范式:深入探索 Stage 模型与 ArkUI 声明式开发
  • 跳转原生系统设置插件 支持安卓/iOS/鸿蒙UTS组件
  • 5-2EFCore性能优化
  • 《sklearn机器学习——管道和复合估计器》联合特征(FeatureUnion)
  • 大数据毕业设计选题推荐-基于大数据的贵州茅台股票数据分析系统-Spark-Hadoop-Bigdata
  • C++ 容器——unordered_xxx
  • 常见设计模式详解
  • 网络爬虫(web crawler)
  • 319章:使用Scrapy框架构建分布式爬虫
  • (LeetCode 面试经典 150 题) 67. 二进制求和(位运算、字符串)
  • 【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】