单例模式单例模式是一种常见的设计模式,
单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
一、懒汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
单例模式-懒汉式单例
public class LazySingleton {
/*** 私有静态对象,加载时候不做初始化 */
private static LazySingleton m_intance=null;
/*** 私有构造方法,避免外部创建实例 */
private LazySingleton(){}
/*** 静态工厂方法,返回此类的唯一实例.* 当发现实例没有初始化的时候,才初始化. * @return LazySingleton */
synchronized public static LazySingleton getInstance(){
if(m_intance==null){
m_intance=new LazySingleton();
}
return m_intance;
}
}
//测试一下单例模式
LazySingleton lazySingleton = LazySingleton.getInstance();
LazySingleton lazySingleton1 = LazySingleton.getInstance();
if(lazySingleton==lazySingleton1)){
System.out.println("同一个对象实例");
}else{
System.out.println("不是同一个对象实例");
}
二、饿汉式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
/***单例模式-饿汉式单例*/
public class EagerSingleton {
/**私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象*/
private static final EagerSingleton m_instance = new EagerSingleton();
/*** 私有构造方法,避免外部创建实例 */
private EagerSingleton() {} //提供了一个空的构造方法
/*** 静态工厂方法,返回此类的唯一实例.* @return EagerSingleton */
public static EagerSingleton getInstance() {
return m_instance;
}
}
//下面来判断一下有没有达到单例效果(系统运行的时候只出来一个空例)
EagerSingleton eagerSingleton = EagerSingleton.getInstance();
EagerSingleton eagerSingleton1 = EagerSingleton.getInstance();
if(eagerSingleton==eagerSingleton1)){
System.out.println("同一个对象实例");
}else{
System.out.println("不是同一个对象实例");
}
三、登记式单例这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
/*** 单例模式- 登记式单例*/
public class RegSingleton {
/*** 登记薄,用来存放所有登记的实例 */
private static Map<String, RegSingleton> m_registry = new HashMap();
//在类加载的时候添加一个实例到登记薄
static {
RegSingleton x = new RegSingleton();
m_registry.put(x.getClass().getName(), x);
}
/*** 受保护的默认构造方法*/
protected RegSingleton() {}
/*** 静态工厂方法,返回指定登记对象的唯一实例;
* 对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回
* @param name
* @return
RegSingleton */
public static RegSingleton getInstance(String name) {
if (name == null) {
name = "RegSingleton";
}
if (m_registry.get(name) == null) {
try {
m_registry.put(name, (RegSingleton) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return m_registry.get(name);
}
/** * 一个示意性的商业方法 * @return String */
public String about() {
return "Hello,I am RegSingleton!";
}}
四、单例模式的一个应用该应用是配置文件管理类。为了本例能正确运行,我在C盘下先建立了一个xxxx.properties文件,内容如下:-------------------
user=rootpassword=leizhimin这个配置文件管理类的代码如下:
单例模式应用-单例类应用-配置文件管理*/
public class ConfigManager {
/*** 属性文件全名*/
private static final String PFILE = "C:\\xxx.properties";
转自:http://www.web36.cn/java/basic/2009/0610/98.html
分享到:
相关推荐
单例模式是一种设计模式,它的核心思想是在整个应用程序中,保证一个类只有一个实例存在,并提供一个全局访问点。这样做的好处在于控制共享资源,优化性能,避免并发问题,以及简化对象间的交互。 **定义** 单例...
单例模式是一种常用的软件设计模式,在整个应用中确保某个类只有一个实例存在,并提供一个全局访问点。这种模式常用于创建那些希望在整个系统中只存在一个实例的对象,例如日志管理器、配置管理器等。本示例中的`...
单例模式确保一个类仅有一个实例存在,并提供一个全局访问点来获取该实例。这种模式通常用于资源管理、线程池、日志对象、数据库连接等场景。 单例模式的特点总结如下: 1. **单例类只能有一个实例**:这是单例...
7.2 单例模式的定义 7.3 单例模式的应用 7.4 单例模式的扩展 7.5 最佳实践 第8章 工厂方法模式 8.1 女娲造人的故事 8.2 工厂方法模式的定义 8.3 工厂方法模式的应用 8.3.1 工厂方法模式的优点 8.3.2 工厂方法模式的...
1. 单例模式:单例模式确保一个类只有一个实例,并提供一个全局访问点。它在多线程环境中尤为重要,因为需要保证线程安全的单个实例创建。在Java等语言中,通常使用双检锁(Double-Check Locking)或者静态内部类的...
这个"java基础知识从业必备知识点结构图小结.rar"压缩包文件,通过图像化的方式,帮助初学者和从业者快速概览Java的主要知识点,并提供了进一步学习的方向。无论是初入Java殿堂的新手,还是需要巩固基础的开发者,都...
对于Java初学者来说,选择合适的书籍进行学习是至关重要的一步。好的书籍不仅能够帮助我们打下坚实的基础,还...因此,对于初学者而言,耐心地研读这些书籍,并结合实际项目进行练习,将会是一个非常有价值的学习过程。
【标题】:“Java大球吃小球游戏”是一款基于Java编程语言开发的结课大作业,它呈现了一个有趣的游戏场景,玩家控制的大球通过吞噬场景中的小球来增长体积。这个游戏不仅展示了Java GUI(图形用户界面)的应用,还...
在Android开发中,单例模式是一种常见的设计模式,用于确保某个类只有一个实例并提供全局访问点。然而,实现单例模式时,开发者可能会遇到一些潜在的陷阱和问题。本篇文章将详细探讨Android中单例模式的坑以及如何...
它涵盖了各种经典的设计模式,如单例模式、工厂模式、观察者模式等,并提供了详尽的解释和示例代码。此外,该网站还包含了对设计模式背后原理的深入分析,帮助开发者更好地理解这些模式的应用场景及其背后的逻辑。 ...
《Java图书管理小系统》是针对初学者设计的一个结课项目,旨在帮助学习者掌握Java编程基础以及简单的文件操作。这个系统并未与数据库进行交互,而是选择了直接对文件进行读写,简化了系统的复杂性,使得初学者可以...
### 小结 以上就是Gang of Four所提出的23种设计模式及其简要介绍。每种模式都解决了特定类型的问题,并提供了一种标准化的解决方案。通过学习和应用这些模式,开发人员可以提高代码质量,增强系统的可扩展性和可...
ProcessEngine 是单例模式,即整个系统只会有一个 ProcessEngine 实例。 RepositoryService RepositoryService 是流程发布服务,是 ProcessEngine 的下一个环节。可以通过 ProcessEngine 获取 RepositoryService ...
《Java飞机大战小游戏实验》是大二下学期的一次双人组结课实验的最终版本,这个项目旨在帮助学生深入理解和应用Java编程语言,尤其是在游戏开发领域的实践技能。通过分析和学习这个游戏的源码,学生可以提升自己的...
本资料包"Android问题小结"是针对Android开发者的一个宝贵资源集合,涵盖了多个方面的知识,包括事件分发机制、设计模式、图层管理、属性动画、框架使用、应用安全以及个人职业发展规划等。 首先,"技术交流--...
此外,我们还运用了设计模式,如工厂模式来创建数据库连接,单例模式来确保数据库连接的唯一性。 在编码过程中,我们使用了JDBC(Java Database Connectivity)进行数据库操作,通过PreparedStatement预编译SQL语句...
Tomcat 是一个基于 Java 的开源 Web 服务器和 Servlet 容器,采用 Java 语言编写,遵循 Servlet 和 JSP 规范。Tomcat 的架构主要由以下几个部分组成: * Connector:负责处理客户端的请求和响应 * Engine:负责管理...
2. **Singleton(单例)模式**:确保一个类只有一个实例,并提供一个全局访问点。这对于创建全局唯一对象非常有用,比如数据库连接池。 3. **Factory(工厂)模式**:提供了一个创建对象的接口,但允许子类决定...