情景概要
- 设计模式———可以简单的理解为处理固定事务的时候使用的一种问题的通用解决方案。(鄙人愚见)
- 目前说的设计模式大多为23种。这23种设计模式都是我们的前辈通过不断的实践总结出来的。
单例设计模式
- 单例设计模式应该是我们接触代码最先接触到的设计模式。大部分同学在学习或工作的过程中都会用到。只是有些时候我们并不知道这其实是一种设计模式。
- 单例(单一实例)就是说一个程序在运行的过程当中保证对一个类只进行一次实例化。好处就是减少系统的开销不用反复去new。我们只提供一个公有的方法让其在外部进行调用。
- 第一种实现方式
public class Singleton
{
// 定义一个静态变量来保存类的实例
private static Singleton uniqueInstance;
// 定义私有构造函数,使外界不能创建该类实例
private Singleton()
{
}
/// <summary>
/// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
// 如果类的实例不存在则创建,否则直接返回
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
- 第二种实现方式
public class Singleton
{
private static readonly object LockObject = new object();
private static Singleton _CurrentInfo;
/// <summary>
/// 单例模式
/// </summary>
public static Singleton CurrentInfo
{
get
{
if (_CurrentInfo == null)
{
lock (LockObject)
{
if (_CurrentInfo == null)
{
_CurrentInfo = new Singleton();
}
}
}
return _CurrentInfo;
}
}
private Singleton()
{
}
}
-
在第二种方法中使用到了lock。这点有疑问的同学可以百度下锁的作用。
-
private Singleton(){ }这个也要单独拿出来说明一下。
-
构造函数相信大家都不陌生。他是什么时候创建的呢?
-
构造函数是类在进行实例化的时候创建的。如果你没有写类的构造函数。在你实例化一个类的时候编译器会默认的创建的一个公有(特别说明是公有)的构造函数。公有也代表着你再程序的任何地方都可以对类进行实例化。但是如果专门写明为一个私有的构造函数那么就限制了这个类只能在类的内部进行实例化。
-
这里我提供给了两种实现单例的方法。为什么呢?
-
我可以给大家提供一种测试方案。新建个方法启用多线程快速的对这个类进行实例化。你可以观察一下在这两种实现方法下他们是否完美的实现了真正意义上的单例。
-
这里我也要说明一点,代码还是要多敲多写。只有实践过了才能达到真正意义上的掌握。
-
加油吧!!西红柿。