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

5. 简单工厂模式

5.1 简单工厂模式的定义

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

5.2 简单工厂模式的作用

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

5.3 例子

同样以鸣潮卡池为例,当我们打开换取页面的时候,会打开抽卡页面,在这个页面里面有一列按钮,分别对应着不同的卡池,而这个卡池可以看作我们的工厂产品。(首先声明,鸣潮不同卡池除了图片不同,页面好像是相同的UI,但是我们为了举例形象就当作是不同的UI)。

突然想到其实例子是对的,因为鸣潮卡池UP池和普池是不一样的,武器普池可以自选。(现实中为了考虑方便和资源包体的大小,大概率是动态生成一个按钮绑定事件,这里我们假设是不同的ui资源页面方便理解)

那么开始实现一个卡池切换创建出不同的卡池页面的简单工厂:

csharp 复制代码
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;
    }
}

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

相关推荐
StevenGerrad17 小时前
【读书笔记】架构整洁之道 P2~3 编程范式&设计原则
设计模式·架构·软件工程
雨落在了我的手上21 小时前
C语言趣味小游戏----猜数字小游戏
c语言·开发语言·游戏
大飞pkz21 小时前
【设计模式】迭代器模式
开发语言·设计模式·c#·迭代器模式
AndrewHZ1 天前
【3D图像技术讨论】3A游戏场景重建实战指南:从数据采集到实时渲染的开源方案
人工智能·算法·游戏·3d·开源·llm·colmap
wanhengidc1 天前
云手机在软件资源方面的优势
运维·服务器·网络·游戏·智能手机
zero13_小葵司1 天前
在不同开发语言与场景下设计模式的使用
java·开发语言·javascript·设计模式·策略模式
IT教程资源1 天前
(免费分享)基于python的飞机大战游戏
python·游戏·pygame
2501_929382651 天前
ES-DE 前端模拟器最新版 多模拟器游戏启动器 含游戏ROM整合包 最新版
大数据·elasticsearch·游戏
wanhengidc1 天前
云手机ARM架构都具有哪些挑战
运维·服务器·安全·游戏·智能手机
charlie1145141911 天前
精读 C++20 设计模式:行为型设计模式 — 状态机模式
c++·学习·设计模式·状态模式·c++20