單例模式之我見

單例模式是一種最多見的設計模式,校招中若是要進大公司,必須透徹的掌握單例模式,總結了常見的一些單例模式java

首先是最簡單的惡漢模式,惡漢模式是一種最簡單的單例模式c#

	/**
	 * 惡漢模式
	 */
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;
	}
}

  或者雙重加鎖模式spa

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
相關文章
相關標籤/搜索