人坚持一件事情是挺难的,工作如此、生活如此、友情如此、亲情如此、爱情亦如此,如果有人能够坚持真心待你,请珍惜他或她。闲话不多说,让我们来看今天的主角,单例模式(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)-创建型模式第三篇”