设计模式这块一直是自己薄弱之处,常用的无非是单例模式和简单工厂模式。前不久去面试,当被问到为什么要用单例模式时,却用了单例模式的优点来做答,结果可想而知,后面又重新看了下单例模式,又加深了其了解,这里记下以共享。
之所以用单例模式,主要是由于某些特殊场景只能存在一个实例,例如一些计数,或如一些排号等。单例模式的优点是内存占用相对少,因为系统只存在一个实例。
我们一般会像以下这样写出单例模式:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (null == instance) {
instance = new Singleton();
}
return instance;
}
}
后在网上看到说是这种写法当在多线程并发的情况下,就有可能会创建出多个实例,解决办法有多种,一种是在声明实例时进行初始化,一种是对获取实例方法加上synchronized:
public class Singleton {
// 方法一
private static Singleton instance = new Singleton();
private Singleton() {}
// 方法二
public synchronized static Singleton getInstance() {
return instance;
}
}
初始化instance,由于前面有了static关键字,保存了这一行代码只会执行一次,下面的获取实例getInstance方法加了同步关键字synchronized解决了并发问题。
分享到:
相关推荐
"浅谈Spring单例Bean与单例模式的区别" 本文主要介绍了Spring单例Bean与单例模式的区别,通过对比两者的定义、实现机制和应用场景,帮助读者更好地理解这两种概念的异同。 一、单例模式的定义和实现 单例模式是一...
单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的...
在日志工具类的场景中,单例模式的应用尤为恰当,因为它避免了因频繁创建日志对象而导致的内存浪费。 原始的日志工具类`LogUtil`提供了一个简单的日志级别控制功能,通过静态方法`debug`, `info`, `error`根据预设...
- 单例模式:确保一个类只有一个实例,并提供全局访问点。 - 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定...
"浅谈Java中单例设计模式之构造方法私有化" 单例设计模式是 Java 中一种常用的设计模式,核心思想是将类的构造方法私有化,以控制实例化对象的产生。这种模式可以确保在程序中只有一个实例化对象存在,这对控制对象...
### Java之浅谈深说——教你如何成长为Java编程高手 在IT行业中,Java作为一种广泛使用的编程语言,其重要性不言而喻。对于希望成为Java编程高手的学习者来说,掌握正确的学习路径至关重要。本文将根据提供的标题、...
在Java中,单例模式的应用广泛,尤其是在处理系统级服务、配置信息、线程池等需要全局共享的对象时。下面我们将深入探讨单例设计模式的实现方式和注意事项。 1. **饿汉式单例** 饿汉式单例在类加载时就完成了实例...
- 设计单例模式的连接池管理类,根据配置文件中的数据库信息动态创建和管理不同的连接池。 3. **连接的创建与回收** - 连接池需要有效地创建连接(如使用线程安全的初始化方法)并确保连接在不再使用时被正确地...
正确理解和适时应用设计模式,如单例模式、工厂模式和观察者模式,有助于提高代码质量。 此外,不重视文档编写和代码注释也是一个误区。良好的文档可以帮助团队成员更好地理解代码,提高协作效率。同时,代码注释...
这个类是Java 7引入的,结合了单例模式和线程局部变量的优势。 值得注意的是,使用`Math.random()`和简单的取模操作`Math.abs(rnd.nextInt()) % n`来生成[0, n)范围内的随机数,可能会导致分布不均匀。正确的做法是...
工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...
由于单例模式的特性,Controller的实例在系统启动后被创建,然后在每次请求时被共享,因此在定义Controller时应遵循一些最佳实践: 1. **避免在Controller中定义成员变量**:由于单例Controller可能会被多个线程...
浅谈Spring中用到的设计模式及应用场景 Spring 框架是 Java 企业级应用程序的核心组件之一,它提供了强大的功能和灵活的架构来简化企业级应用程序的开发。Spring 框架使用了多种设计模式来实现其功能,本文将对 ...
4. **单例模式**: - **确保对象的唯一性**:确保一个类只有一个实例,并提供一个全局访问点。 5. **原型模式**: - **对象的克隆**:通过复制一个已有实例来创建新的实例,避免创建新对象的复杂过程。 6. **建造...
成员内部类适合处理需要紧密关联的情况,而静态内部类则适用于实现工具类或辅助功能,并且在单例模式中有独特的优势。理解并恰当运用这两种内部类,能够提升代码的效率和可维护性,是Java程序员进阶的必修技能。
单例模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为 private,并提供一个创建对象的方法,由于构造对象被声明为 private,外界无法直接创建这个类型的对象,只能通过...