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

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

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

相关推荐
河南花仙子科技11 小时前
花仙子科技详解:小游戏合规开发完整要点
科技·游戏
旧物有情18 小时前
游戏开发常用架构 #MVP,MVC
游戏·unity·架构·mvc
笨鸟先飞的橘猫19 小时前
游戏后端分布式学习——一致性协议Raft
分布式·学习·游戏
杨充20 小时前
10.可测试性实战设计
设计模式·开源·代码规范
杨充20 小时前
9.重构十二式的实战
设计模式·开源·代码规范
杨充20 小时前
6.设计原则的全景图
设计模式·开源·全栈
杨充20 小时前
2.面向对象的特性
设计模式
杨充20 小时前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充20 小时前
8.反模式与坏味道
设计模式·开源·代码规范
杨充20 小时前
3.接口vs抽象类比较
设计模式