人坚持一件事情是挺难的,工作如此、生活如此、友情如此、亲情如此、爱情亦如此,如果有人能够坚持真心待你,请珍惜他或她。闲话不多说,让我们来看今天的主角,单例模式(Singleton Pattern)。
解决的问题:
- 如何确保一个类在应用程序生命周期中只产生一个对象。例如外观模式(Facade Pattern)往往就需要结合Singleton模式来使用,在一个应用中Facade模式通常只需存在一个实例
- 如何能让对象状态在整个应用程序生命周期内被使用,Singleton模式相对全局变量在某些语言中可能存在如下优势:
- Singleton模式可以延迟初始化和内存分配,在某些语言中(比如C++)全局变量在应用程序初始化期间内存便被分配
怎么去解决:
就像其它所有模式一样,实现Singleton模式的方法也有多种,下面例举其中一种方法。
- 通常我们可以为类定义一个公共的静态方法或属性,并在该方法或属性体中进行类的实例化,倘若发现已经存在实例化的对象,那么就直接返回这个已经存在的对象。
UML:
实例:
using system;
namespace SingletonPattern
{
public class Singleton
{
private static Singleton _instance;
private static object _locker = new object();
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_locker)
{
_instance = new Singleton();
}
}
return _instance;
}
}
public string Name
{
get { return "Foobar"; }
}
}
internal class Program
{
private static void Main(string[] args)
{
Console.Write("My name is : ");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(Singleton.Instance.Name);
Console.Read();
}
}
}
输出:



One Reply to “单例模式(Singleton Pattern)-创建型模式第三篇”