单例模式
博客专区 > sun_lb 的博客 > 博客详情
单例模式
sun_lb 发表于4年前
单例模式
  • 发表于 4年前
  • 阅读 136
  • 收藏 16
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 单例模式(Singleton)
单例模式(Singleton)



功能:
一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

类图:

优点:
(1). 提升系统性能;
(2). 避免对资源的多重占用;
(3). 可以在系统设置全局的访问点。

缺点:
(1). 无法创建子类,扩展困难;
(2). 不利于测试,在并行开发环境中,如果采用单例模式的类没有完成,是不能进行测试的;
(3). 与单一职责原则有冲突,单例模式把“要单例”和业务逻辑融合在一起。

使用场景:
(1). 要求生成唯一序列号的环境;
(2). 在整个项目中需要一个共享访问点或共享数据;
(3). 创建一个对象需要消耗的资源过多,如访问IO和数据库等资源;
(4). 需要定义大量的静态常量和静态方法(如工具类)的环境。

应用:
饿汉式单例类:类加载时,就进行对象实例化。
public class Singleton {
	private static Singleton mInstance = new Singleton();

	private Singleton() {
	}

	public static Singleton getInstance() {
		return mInstance;
	}
}
懒汉式单例类:第一次引用时,才进行对象实例化。
public class Singleton {
	private static Singleton mInstance;

	private Singleton() {
	}

	synchronized public static Singleton getInstance() {
		if (mInstance == null)
			mInstance = new Singleton();
		return mInstance;
	}
}
性能最优:
public class Singleton{
    private Singleton() {
    }

    public static SingletonTest getInstance() {
        return SingletonHolder.instance;
    }

    private static class SingletonHolder {
        private static Singleton instance = new Singleton();
    }
}
共有 人打赏支持
粉丝 0
博文 8
码字总数 2425
×
sun_lb
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: