`

java设计模式-单例模式初探

阅读更多
概念:单例模式表示一个类只会生成唯一的一个对象。

特点
       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;
	}
}
分享到:
评论

相关推荐

    MusicPlay.zip

    7. **设计模式**:为了提高代码的可维护性和扩展性,开发者可能会运用到一些设计模式,如单例模式(管理音频资源)、工厂模式(创建播放器对象)等。 在MusicPlay的压缩包中,只有一个文件"MusicPlay",这可能是...

    java写的聊天简单版本,还有一些功能没有实现,只是一个思路

    6. **设计模式**:为了保证代码的可维护性和扩展性,开发者可能会应用单例模式(管理服务器实例)、工厂模式(创建客户端连接)等设计模式。 7. **异常处理**:良好的异常处理机制能够确保程序在遇到错误时能优雅地...

    spring-3.1.0中文版api帮助文档

    - **Bean作用域**:讲解Bean的生命周期和作用域管理,包括单例、原型等不同模式。 **2.8 Bean Validation集成支持** - **验证机制**:整合JSR 303或JSR 349的Bean Validation API,进行数据校验。 **2.9 回调接口...

    Spring开发指南

    它是Spring IoC容器的基础,提供了延迟加载和单例模式的支持。 - **特点**:BeanFactory是一个工厂模式的实现,它可以用来创建和管理Spring Bean。它支持依赖注入和生命周期管理,但通常被认为是低级别的API,因为...

    Ioc注入讲解

    - **单例**:指定Bean是否为单例模式。 - **初始化方法**:指定Bean初始化时执行的方法。 - **销毁方法**:指定Bean销毁前执行的方法。 - **自动装配**:自动匹配并注入依赖。 - **方法拦截**:定义方法级别的拦截...

    初试Guice测试文件

    在Java世界中,依赖注入(Dependency Injection,简称DI)是一种常见的设计模式,它可以帮助我们构建松耦合、可测试的代码。Guice是Google提供的一款轻量级的DI框架,用于简化Java应用的初始化和配置过程。本文将...

    SE2_Einzelphase

    12. **设计模式**:初探常见的设计模式,如工厂模式、单例模式、观察者模式,以及它们在实际项目中的应用。 13. **单元测试**:学习JUnit框架,了解如何编写和执行单元测试,确保代码的质量。 14. **Maven或Gradle...

    leetcode答案-leetcode:初始导入

    5. 设计模式:单例、工厂、装饰器等模式在编写复杂解决方案时会有所应用。 6. 优化技巧:如时间复杂度分析、空间复杂度优化、位运算、双指针等,这些都是提高算法效率的关键。 通过参与LeetCode的挑战和参考开源...

Global site tag (gtag.js) - Google Analytics