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和数据库等资源
》工具类
参考资料:
《设计模式之蝉》
《大话设计模式》
原文地址:https://www.cnblogs.com/idea-persistence/p/9532467.html
时间: 2024-10-07 06:09:44