什么是单例模式
单例模式的官方定义是:确保一个类只有一个实例,并提供一个全局访问点。
也就是说,单例模式就是保证一个类只有一个实例的一种实现方法。
什么时候会用到单例模式
由上面的定义我们可以很清楚的知道,使用单例模式,必然是我们的工程中对某个对象只需要一个实例的情况,这种例子有很多,比如游戏开发中的各种Manager、Controller等等。在整个系统中,我们只需要一个UiManager的实例来对我们Ui层进行管理,所以这个时候用单例模式,就非常适合。
如何实现单例模式
从定义上看,实现单例模式主要有两点,一个是一个类只有一个实例, 另一个是只提供一个全局访问点。
首先,在C#中创建类的实例,我们是用new来实现
//创建一个Singleton 类
public class Singleton
{
//注:Singleton 类中没有定义构造函数,编译器会帮我们生成一个公有的无参构造函数
}
//实例化一个Singleton 类
Singleton mSingleton = new Singleton ()
同时禁止在外界通过new创建某个类的实例也很简单,只需要在该类里定义一个私有的构造函数就好了
//创建一个Singleton 类
public class Singleton
{
//定义一个私有的构造函数
private Singleton()
{
}
}
之后,在该类里创建一个类的实例,然后用一个变量来保存,就实现了第一点,一个类只有一个实例。
//创建一个Singleton 类
public class Singleton
{
//用一个变量保存类的实例
private static Singleton mInstance = new Singleton();
//定义一个私有的构造函数
private Singleton()
{
}
}
这里并没有结束,我们还需要提供一个该类的全局访问点,这点我们可以在类里定义一个公有方法或者属性来让外界访问,并且在方法或者属性里把该类的实例公开出去,这样外界就有了唯一的全局访问点来访问该类里的方法、变量,等等了。
//创建一个Singleton 类
public class Singleton
{
//用一个变量保存类的实例
private static Singleton mInstance;
//定义一个私有的构造函数
private Singleton()
{
}
//定义一个让外界访问的公有方法,并把类的实例公开
public static Singleton Instance()
{
// 如果类的实例不存在则创建,否则直接返回
if (mInstance== null)
{
mInstance = new Singleton();
}
return mInstance;
}
}
如此,我们便可以在外界用Singleton.Instance来得到这个类的实例,对其内部进行访问了。
用单例模式写一个UiManager
//创建一个UiManager类
public class UiManager
{
//用一个变量保存类的实例
private static UiManager mInstance;
//定义一个私有的构造函数
private UiManager()
{
}
//定义一个让外界访问的公有方法,并把类的实例公开
public static UiManager Instance()
{
// 如果类的实例不存在则创建,否则直接返回
if (mInstance== null)
{
mInstance = new UiManager();
}
return mInstance;
}
public void Open(string UiName)
{
//打开一个ui
}
public void Close(string UiName)
{
//关闭一个ui
}
public void Refresh(string UiName)
{
//刷新一个ui
}
}
外界调用
UiManager.Instance.Open(string)
UiManager.Instance.Close(string)
UiManager.Instance.Refresh(string)
当然了,为了提高代码的利用率,我们一般是写一个单例Singleton类,然后需要用单例模式的类直接去继承Singleton类
public Class UiManager:Singleton
{
//继承了单例模式的UiManager类
}
最后
希望各位的coding之路没有bug.
反正上面的代码我没有编译运行过,若有bug,自己Debug~
//参考博客:https://www.cnblogs.com/zhili/p/SingletonPatterm.html
//over