概念:单例模式表示一个类只会生成唯一的一个对象。
特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
应用场景:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
实现方法:有两种实现方法:Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。
事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效。
第一种:
public class SingletonTest
{
public static void main(String[] args)
{
Singleton singleton = Singleton.getInstance();
Singleton singleton1 = Singleton.getInstance();
System.out.println(singleton == singleton1);
}
}
class Singleton
{
private static Singleton singleton = new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return singleton;
}
}
第二种:
这一种在多线程并发环境下很可能出现多个Singleton实例。(有待深究)
public class SingletonTest
{
public static void main(String[] args)
{
Singleton singleton = Singleton.getInstance();
Singleton singleton1 = Singleton.getInstance();
System.out.println(singleton == singleton1);
}
}
class Singleton
{
private static Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if(singleton == null)
{
singleton = new Singleton();
}
return singleton;
}
}
分享到:
相关推荐
7. **设计模式**:为了提高代码的可维护性和扩展性,开发者可能会运用到一些设计模式,如单例模式(管理音频资源)、工厂模式(创建播放器对象)等。 在MusicPlay的压缩包中,只有一个文件"MusicPlay",这可能是...
6. **设计模式**:为了保证代码的可维护性和扩展性,开发者可能会应用单例模式(管理服务器实例)、工厂模式(创建客户端连接)等设计模式。 7. **异常处理**:良好的异常处理机制能够确保程序在遇到错误时能优雅地...
- **Bean作用域**:讲解Bean的生命周期和作用域管理,包括单例、原型等不同模式。 **2.8 Bean Validation集成支持** - **验证机制**:整合JSR 303或JSR 349的Bean Validation API,进行数据校验。 **2.9 回调接口...
它是Spring IoC容器的基础,提供了延迟加载和单例模式的支持。 - **特点**:BeanFactory是一个工厂模式的实现,它可以用来创建和管理Spring Bean。它支持依赖注入和生命周期管理,但通常被认为是低级别的API,因为...
- **单例**:指定Bean是否为单例模式。 - **初始化方法**:指定Bean初始化时执行的方法。 - **销毁方法**:指定Bean销毁前执行的方法。 - **自动装配**:自动匹配并注入依赖。 - **方法拦截**:定义方法级别的拦截...
在Java世界中,依赖注入(Dependency Injection,简称DI)是一种常见的设计模式,它可以帮助我们构建松耦合、可测试的代码。Guice是Google提供的一款轻量级的DI框架,用于简化Java应用的初始化和配置过程。本文将...
12. **设计模式**:初探常见的设计模式,如工厂模式、单例模式、观察者模式,以及它们在实际项目中的应用。 13. **单元测试**:学习JUnit框架,了解如何编写和执行单元测试,确保代码的质量。 14. **Maven或Gradle...
5. 设计模式:单例、工厂、装饰器等模式在编写复杂解决方案时会有所应用。 6. 优化技巧:如时间复杂度分析、空间复杂度优化、位运算、双指针等,这些都是提高算法效率的关键。 通过参与LeetCode的挑战和参考开源...