首页 > 代码库 > 单例模式之我见
单例模式之我见
单例模式是一种最常见的设计模式,校招中如果要进大公司,必须透彻的掌握单例模式,总结了常见的一些单例模式
首先是最简单的恶汉模式,恶汉模式是一种最简单的单例模式
/** * 恶汉模式 */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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。