设计模式二 单例模式
Posted idea-persistence
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式二 单例模式相关的知识,希望对你有一定的参考价值。
0、基本定义
单例模式,保证一个类仅有一个实例,并提供一个访问它但全局访问点.
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法,让类自身负责保存它的唯一实例。
这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
要求:
1、构造私有方法
2、定义一个实例,自己实例化
3、获取实例
spring 中默认bean加载都是单例。
1、实现方式
1.1、饿汉式
public class Emperor { private static final Emperor emperor = new Emperor(); private Emperor() { } public static Emperor getInstance() { return emperor; } public void say() { System.out.println("I am Empror..A. " + this); } }
1.2、懒汉式
public class Singleton {
private static Singleton singleton = null;
private Singleton() {}
//线程不安全
public static Singleton getSingleton() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton ;
}
}
2、优缺点
2.1 、优点:
》减少了内存开支,
》减少了系统的性能开销,当一个对象需要较多资源时,则可以启动时直接产生。 spring IOC
2.2、缺点
》 单例模式一般没有接口,扩展困难
》单例模式对测试不利。在并行环境中,如果单例没有完成,是不能进行测试的,没有接口也不能mock的方式虚拟一个对象。??why
》与单一职责有冲突。
2.3 使用场景
》项目中需要一个共享数据或共享访问点,如web页面中计数器
》 创建一个对象需要消耗的资源过多,如 访问IO和数据库等资源
》工具类
参考资料:
《设计模式之蝉》
《大话设计模式》
以上是关于设计模式二 单例模式的主要内容,如果未能解决你的问题,请参考以下文章