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

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

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

相关推荐
o0向阳而生0o20 分钟前
112、23种设计模式之命令模式(20/23)
设计模式·命令模式
将编程培养成爱好1 小时前
C++ 设计模式《外卖骑手状态系统》
c++·ui·设计模式·状态模式
猿太极1 小时前
设计模式学习(3)-行为型模式
c++·设计模式
i道i2 小时前
Verilog 利用伪随机,时序,按键消抖等,实现一个(打地鼠)游戏
游戏·fpga开发·verilog
快乐非自愿3 小时前
常用设计模式:工厂方法模式
javascript·设计模式·工厂方法模式
2501_940094025 小时前
PS1模拟器 DuckStation更新最新版整合 下载即玩 附PS1Bios/游戏/金手指 安卓版+电脑版
android·游戏·电脑
guangzan9 小时前
常用设计模式:模板方法模式
设计模式
wanhengidc11 小时前
云手机是真实手机吗
运维·服务器·游戏·智能手机·云计算
AnalogElectronic11 小时前
用AI写游戏4——Python实现飞机大战小游戏1
python·游戏·pygame
APP出海11 小时前
Google政策大更新:涉及金融(个人贷款),社交约会与游戏(未成年人相关),健康等所有类别App
android·游戏·金融·产品运营·产品经理