常用设计模式
单例
//写法一:c# 线程安全的单例(Double-checked locking)
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new object();
private Singleton(){} //防止外界创建该类对象
public static Singleton Instance
{
get
{
if (instance == null) //提升性能,不用每次加锁
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
//写法二:c# 线程安全的单例,利用了 Lazy<T> 内部已有的多线程处理逻辑。适用 .Net4 以上版本
public class Singleton
{
private static readonly Lazy<Singleton> instance = new Lazy<Singleton>(() => new Singleton());
private Singleton() { }
public static Singleton Instance => instance.Value;
}
//写法三:继承MonoBehaviour以用于Unity引擎,单线程版。
public abstract class USingleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
T[] objs = GameObject.FindObjectsOfType<T>(true);
if (objs.Length > 0)
{
instance = objs[0];
for (int i = 1; i < objs.Length; i++)
{
GameObject.Destroy(objs[i].gameObject); //去除重复
}
}
else
{
GameObject newObj = new GameObject(typeof(T).Name); //自动创建 object
DontDestroyOnLoad(newObj); //生命周期跨场景
instance = newObj.AddComponent<T>();
}
}
return instance;
}
}
}
//使用方法
public class GameManager : USingleton<GameManager>
{
}
抽象工厂
对象池
观察者模式
命令模式
状态模式
状态机管理器的实现
状态机的实现
状态基类的实现
使用案例
状态模式的不足之处和应对方法
更多资料
Last updated