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

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;
    }
}

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

相关推荐
geovindu1 天前
rust: Borg Pattern(续)
开发语言·后端·设计模式·rust·博格模式
神仙别闹2 天前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
染指11102 天前
140.Agent-多Agent框架-Agent执行Skills流程
数据库·人工智能·设计模式·langchain·agents
sarasuki2 天前
Agent 是怎么做错误处理的呢?
人工智能·设计模式·agent
A1Book2 天前
从 0 设计历史专题资料汇编的 AI Agent 编排架构——六轮真实任务复盘
设计模式
河南花仙子科技2 天前
企业私域死气沉沉?小游戏盘活用户活跃度
游戏
Lonely丶墨轩3 天前
用 Vue + Spring Boot + Python 做一个 AI 双人海龟汤游戏:从出题、联机到自动审稿等核心技术设计与实现
spring boot·后端·游戏
avi91113 天前
Unity 介绍一个开源免费图片工具 Tropy 科研.org推荐 - 代表作
游戏·开源·aigc·tropy·图片管理
小智GEO观察3 天前
显卡哪些是一线品牌:高端AI算力与4K/8K游戏市场品牌格局观察
人工智能·游戏
梦想平凡3 天前
棋牌游戏技术实战(一):用 Node.js 实现房间消息队列、请求幂等与断线恢复
游戏·node.js