1.单例模式
保证一个类只有一个实例,且具有全局访问点,一般用作管理器,下面是用静态变量实现的单例
/// <summary>
/// 单例基类
/// </summary>
//<summary>:这个标签是用于代码文档生成工具的,通常在编写代码时会用来描述代码的功能、用途等。在这里,它说明下面的代码是一个单例基类。
public class Singleton<T> where T : new()
{
static T instance;
public static T Instance
{
get
{
if (instance == null)
{
instance = new T();
}
return instance;
}
}
}
解释代码:
-
public class Singleton<T> where T : new()
:这是一个泛型类定义,命名为 Singleton,其中 T 是一个类型参数。where T : new()
这部分表示 T 必须有一个无参数的公共构造函数,因为在后面的代码中会使用new T()
来创建 T 类型的实例。泛型就是不知道具体是什么类型,就用T占位字符先表示,所以之后的代码逻辑,不管什么类型的参数,都执行相同的代码逻辑 -
static T instance;
:这是一个静态字段,用来保存单例实例。因为它是静态的,所以所有使用该类的实例将共享这个字段。 -
public static T Instance { get { ... } }
:这是一个静态属性,用来获取单例实例。通过这个属性可以访问单例对象。 -
get
:这是属性的访问器,用来获取属性值。在这个访问器中,如果实例还没有被创建,它会通过new T()
来创建一个新的实例,并将其赋值给instance
,然后返回该实例。如果实例已经存在,它直接返回已有的实例。
这样设计的好处是,无论使用何种类型,只需要继承这个泛型基类,就可以轻松地创建对应类型的单例。
其他类转换为单例,ShopMgr是商店管理器,继承Singleton就转换为单例
class ShopMgr : Singleton<ShopMgr>
{
//具体逻辑
}
2.观察者模式
观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,主要用于解耦代码
这里使用一个简单的事件管理器来演示逻辑
using System.Collections;
using System.Collections.Generic;
using UnityEngine