單例模式是一種最多見的設計模式,校招中若是要進大公司,必須透徹的掌握單例模式,總結了常見的一些單例模式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