5. 簡單工廠模式
5.1 簡單工廠模式的定義
簡單工廠模式的核心是定義一個創建對象的接口,將對象的創建和本身的業務邏輯分離,降低系統的耦合度,使得兩個修改起來相對容易些,當以后實現改變時,只需要修改工廠類即可。
5.2 簡單工廠模式的作用
用戶不需要知道所有工廠方法的實現,只需要根據自己的需求,把需求告訴工廠類,工廠直接進行生產,將用戶和生產隔離開。
5.3 例子
同樣以鳴潮卡池為例,當我們打開換取頁面的時候,會打開抽卡頁面,在這個頁面里面有一列按鈕,分別對應著不同的卡池,而這個卡池可以看作我們的工廠產品。(首先聲明,鳴潮不同卡池除了圖片不同,頁面好像是相同的UI,但是我們為了舉例形象就當作是不同的UI)。
突然想到其實例子是對的,因為鳴潮卡池UP池和普池是不一樣的,武器普池可以自選。(現實中為了考慮方便和資源包體的大小,大概率是動態生成一個按鈕綁定事件,這里我們假設是不同的ui資源頁面方便理解)
那么開始實現一個卡池切換創建出不同的卡池頁面的簡單工廠:
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;}
}
至此,我們利用簡單工廠模式制作了一個動態創建抽卡活動下子頁簽的功能。圖中示例僅供參考,實際開發中使用什么方式去實現對應功能需要具體分析。