zoukankan      html  css  js  c++  java
  • 单例模式之我见

    单例模式是一种最常见的设计模式,校招中如果要进大公司,必须透彻的掌握单例模式,总结了常见的一些单例模式

    首先是最简单的恶汉模式,恶汉模式是一种最简单的单例模式

    	/**
    	 * 恶汉模式
    	 */
    public class SingleTon {
    	private static final SingleTon instance = new SingleTon();
    	private SingleTon(){
    		
    	}
    	public static SingleTon getInstance() {
    		return instance;
    	}
    }
    

      其实是懒汉加载模式,最简单的懒汉加载模式如下

    public class SingleTon {
    	private static SingleTon instance = null ;
    	private SingleTon(){
    		
    	}
    	public  static SingleTon getInstance() {
    		if (instance == null) {
    			instance = new SingleTon();
    		}
    		return instance;
    	}
    }
    

    但上述懒汉模式是线程不安全的,可以对其进行加锁

    public class SingleTon {
    	private static SingleTon instance = null ;
    	private SingleTon(){
    		
    	}
    	public static synchronized SingleTon getInstace(){
    		if (instances == null ) {
    			return instances = new SingleTon();
    		}
    		return instances;
    	}
    }
    

      或者双重加锁模式

    public class SingleTon {
    	private static SingleTon instance = null ;
    	private SingleTon(){
    		
    	}
    	public static SingleTon getInstance(){
    		if (instances == null) {
    			synchronized (SingleTon.class) {
    				instances = new SingleTon();
    			}
    		}
    		return instances;
    	}
    }
    

      

    单例模式还可以用内部类来实现

          
    public class SingleTon {
          public static class SingleTonHolder{
    		private static SingleTon instance = new SingleTon();
    	}
    
    	public SingleTon() {
    	}
    	public static SingleTon getInstance() {
    		return SingleTonHolder.instance;
    	}
    }    
    

    看看大牛Jon Skeet是怎么写单例的 (c#版)

    public sealed class Singleton
    {
        Singleton()
        {
        }
    
        public static Singleton Instance
        {
            get
            {
                return Nested.instance;
            }
        }
    
        class Nested
        {
            // Explicit static constructor to tell C# compiler
            // not to mark type as beforefieldinit
            static Nested()
            {
            }
    
            internal static readonly Singleton instance = new Singleton();
        }
    }
    有任何疑问可联系本人huwei08@baidu.com
  • 相关阅读:
    详解C#break ,continue, return
    c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
    简短总结一下C#里跨线程更新UI(转)
    必备:常用px,pt,em换算表(转)
    C# Textbox的ImeMode取值对中文输入法的影响 (转)
    转自:C#中TextBox水印提示的简单实现
    转载:C# this.invoke()作用 多线程操作UI 理解二
    转载:C# this.Invoke()的作用与用法 理解三
    MySQL数据库----基础操作
    python之路----线程
  • 原文地址:https://www.cnblogs.com/huwei0814/p/3840387.html
Copyright © 2011-2022 走看看