C#设计模式——单例模式

什么是单例模式

单例模式的官方定义是:确保一个类只有一个实例,并提供一个全局访问点。
也就是说,单例模式就是保证一个类只有一个实例的一种实现方法。

什么时候会用到单例模式

由上面的定义我们可以很清楚的知道,使用单例模式,必然是我们的工程中对某个对象只需要一个实例的情况,这种例子有很多,比如游戏开发中的各种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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值