zoukankan      html  css  js  c++  java
  • 单例模式(Singleton Pattern)

    模式定义

    单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
    单利模式所要满足的条件:

    • 只能有一个实例
    • 必须自行创建
    • 自行向整个系统提供访问

    UML类图

    • 私有静态自身类型字段
    • 私有构造方法
    • 公有静态函数返回自身对象

    代码结构

    	public static class SingletonApp
    	{
    		public static void Run()
    		{
    			Singleton s1 = Singleton.Instance();
    			Singleton s2 = Singleton.Instance();
    
    			if(s1 == s2)
    			{
    				Console.WriteLine("Objects are the same instance");
    			}
    		}
    	}
    
    	public class Singleton
    	{
    		private static Singleton _instance;
    
    		protected Singleton()
    		{}
    		public static Singleton Instance()
    		{
    			if(_instance == null)
    			{
    				_instance = new Singleton();
    			}
    
    			return _instance;
    		}
    	}
    

    多线程代码结构

    这里介绍著名的双锁机制。(思考:一个类中有一静态字段和一修改该字段的静态方法,对于多线程是否都是不安全的?)

    	public class Singleton
    	{
    		private static Singleton _instance;
    		protected Singleton()
    		{ }
    		public static Singleton Instance()
    		{
    			if (_instance == null)
    			{
    				lock (typeof(Singleton))
    				{
    					if (_instance == null)
    					{
    						_instance = new Singleton();
    					}
    				}
    			}
    			return _instance;
    		}
    	}
    

    C#语法优化

    我们用的C#语言是高级、简洁的语言。那么更简洁的写法为:(注意关键词readonly)

    	public class Singleton
    	{
    		private static readonly Singleton _instance = new Singleton();
    		protected Singleton()
    		{ }
    		public static Singleton GetInstance()
    		{
    			return _instance;
    		}
    	}
    

    情景模式

    利用单例模式主要用来限制类只能实力化一个对象,所有访问都访问唯一一个对象。有时我们读取配置文件时,创建单例模式。

  • 相关阅读:
    【MySQL】【2】数字排序问题
    【MySQL】【1】表中存在重复记录,删除保留其中一条
    poj 1811 Prim test
    Yours 的博客开张啦!
    P1044
    P1103
    hustwinter1-B
    hustwinterC
    hustwinter1-A
    hdu 2138 How many prime numbers
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8352651.html
Copyright © 2011-2022 走看看