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

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

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

相关推荐
huzhongqiang11 小时前
Python 单例模式的几种实现方式:朴素才是王道
设计模式
一只叫煤球的猫16 小时前
ThreadForge 1.2.0 发布:让 Java 并发代码更好写,这次补齐了高阶编排、示例与观测能力
java·设计模式·设计
上海云盾-小余18 小时前
BGP 高防与普通高防差异解析:游戏与政企业务该如何选型
游戏
_Evan_Yao18 小时前
当 if 成为性能判官:分支预测、流水线冲刷与 Java 中的“猜谜游戏”
人工智能·游戏
软泡芙18 小时前
【WPF 】MVVM 设计模式在 WPF 中的实战应用
设计模式·wpf
魔士于安18 小时前
Unity windows 同步 异步 打开文件文件夹工具
游戏·unity·游戏引擎·贴图·模型
魔士于安19 小时前
unity lowpoly 风格 城市 建筑 道路 交通标志
游戏·unity·游戏引擎·贴图·模型
^—app56686619 小时前
短剧游戏APP广告联盟SDK类型模块调用源代码
游戏
FreeGo~19 小时前
java23种设计模式示例
设计模式
ximu_polaris19 小时前
设计模式(C++)-行为型模式-命令模式
c++·设计模式·命令模式