• 单例模式(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;
    		}
    	}
    

    情景模式

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

  • 相关阅读:
    用Eclipse做J2Me开发的前期配置
    cglib和asm相关的文章
    bcp命令详解
    Oracle/PLSQL AFTER DELETE Trigger
    Mybatis(九)分页插件PageHelper使用
    Mybatis(八)逆向工程
    Mybatis(四)关联映射
    Mybatis(三)返回值四.注解配置
    Mybatis(二)参数(Parameters)传递
    Mybatis(一)实现单表的增删改查
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8352651.html
Copyright © 2020-2023  润新知