何为单例模式?所谓的单例模式就是单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。
个人理解就是在系统中一个类仅有一个实例,在整个系统都可通过一个访问点访问到它。在创建对象时,只允许创建对象时,每次只允许创建一个对象,如果再想创建其他对象时,只能把上一个创建的对象释放掉或关闭,才能重新创建。
单例模式在生活中挺常见的,比如在去银行取钱时,如果同一个账户在同一时间在不同的地点进行取钱,那么就要用到单例模式,这样就可以保证,取钱是一个完整的过程,不会在中途打断,导致银行损失。
还有在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。
下面介绍一个单例模式的代码模板
namespace 单例模式代码
{
class Program
{
static void Main(string[] args)
{
Singleton S1 = Singleton.GetInstance();
Singleton S2 = Singleton.GetInstance();
if(S1 ==S2 )//比较两次实例化后对象的结果是实例相同。
{
Console.WriteLine("两个对象时相同的实例");
}
Console.Read();
}
class Singleton
{
private static Singleton instance;
private Singleton()//构造方法让其Private,这就毒死外界利用New创建此类实例的可能
{
}
public static Singleton GetInstance()//全局访问点
{
if(instance==null) //实例不存在,则NEW一个 新实例,否则返回已有实例。
{
instance=new Singleton ();
}
return instance ;
}
}
}
}
单例模式的优点:
1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
单例模式的缺点:
1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。这个问题可以通过静态实例来解决。
2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,所以当他们发现不能实例化一个类的时候会很惊讶。
3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,但是这么做将导致单例类内部的指针指向不明。