-
在某些情况下只需要某个对象只能有一个实例,就需要用到单例模式。
-
单例模式的特点
- 只有一个实例
- 必须要自行实例化
- 必须自行向整个系统停工访问点
-
饿汉式单例模式的代码实现
/** * 懒汉式单例模式 */ public class LazySongleton { private static LazySongleton lazySongletonInstance; private LazySongleton() { } public LazySongleton getInstance(){ if(null == lazySongletonInstance){ lazySongletonInstance = new LazySongleton(); } return lazySongletonInstance; } }
-
饿汉式单例模式代码实现
/** * 饿汉式单例模式 */ public class HungrySingleton { private static final HungrySingleton hungrySingletonInstance = new HungrySingleton(); //在类加载的过程就会初始化静态变量 public HungrySingleton() { } public HungrySingleton getInstance(){ return hungrySingletonInstance; } }
-
上面的两种实现方式在多线程环境下有可能会出现创建多个实例的问题,就违背了单例设计模式。
-
解决的方案如下:
- 使用sinchronized来处理,也就是将getInstance()方法变成同步方法。
- 直接初始化静态变量,保证线程安全。
-
线程安全的单例设计模式
/** * 线程安全的单例模式 */ public class SynSingleton { private static SynSingleton synSingleton; private SynSingleton() { } public synchronized static SynSingleton getInstance(){ if(null == synSingleton){ synSingleton = new SynSingleton(); } return synSingleton; } }
-
单例模式的优点
- 节约了系统资源,由于系统中只存在一个实例对象,对于一些需要频繁创建和销毁的系统而言,单例模式节约了系统资源提高了系统的性能。
- 因为单例模式封装了它的唯一实例,所以它可以严格控制客户的访问方式。
-
单例模式的缺点
- 单例模式中没有抽象层,因此单例类的扩展很困难;
- 单例类的职责过重,在一定程度上违背了"单一职责"原则。
-
单例模式的使用场景:
- 系统只需要一个实例对象,或者需要考虑消耗资源太大而允许创建一个对象;
- 客户调用类的单个实例只允许有一个公共访问点,不能通过其他途径访问该实例。
-
JDK中单例模式的使用
设计模式--单例模式
最新推荐文章于 2024-10-03 19:41:41 发布