单例模式
这是工作中经常用到的模式,记下了以便复用。
以前用过的代码,新的就不写了。变懒了。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using LitJson;
public class UIPanelManager {
//单例模式
private static UIPanelManager _instance = null;
//用于存放panel的路径
private Dictionary<BasePanel.PanelType, string> panelPaths;
//用于存放Prefab的实例
public Dictionary<BasePanel.PanelType, GameObject> panelGameObjects;
//获取实例
public static UIPanelManager GetInstance() {
if (_instance == null) {
_instance = new UIPanelManager();
}
return _instance;
}
//获取路径
public string GetPanelPath(BasePanel.PanelType panelType) {
if (panelPaths == null) {
panelPaths = new Dictionary<BasePanel.PanelType, string>();
List<PanelMessage> panelMessageList = new List<PanelMessage>();
TextAsset ta = Resources.Load("PathJson") as TextAsset;
string panelJsonString = ta.text;
panelMessageList = JsonMapper.ToObject<List<PanelMessage>>(panelJsonString);
foreach (var item in panelMessageList)
{
panelPaths.Add((BasePanel.PanelType)System.Enum.Parse(typeof(BasePanel.PanelType), item.panelType), item.panelPath);
}
}
string path;
panelPaths.TryGetValue(panelType, out path);
return path;
}
//获取prefab实例
public GameObject GetPanelObj(BasePanel.PanelType panelType) {
if (panelGameObjects == null) {
panelGameObjects = new Dictionary<BasePanel.PanelType, GameObject>();
}
GameObject obj;
panelGameObjects.TryGetValue(panelType, out obj);
if (obj == null) {
obj = GameObject.Instantiate(Resources.Load<GameObject>(GetPanelPath(panelType)));
panelGameObjects.Add(panelType, obj);
}
obj.SetActive(true);
return obj;
}
//
public void Clear() {
if(panelGameObjects!=null)
panelGameObjects.Clear();
}
public void Remove(BasePanel.PanelType k) {
panelGameObjects.Remove(k);
}
}
private static UIPanelManager _instance = null;
public static UIPanelManager GetInstance() {
if (_instance == null) {
_instance = new UIPanelManager();
}
return _instance;
}
比较关键的2句,其他都是自己根据情况来。