转载
java模式之单例模式:
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
1,一个类只能有一个实例
2,自己创建这个实例
3,整个系统都要使用这个实例
例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
一个例子:Windows 回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。
两种形式:
1,饿汉式单例类
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
2,懒汉式单例类
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。
注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。
一般来说第一种比较安全。
- 大小: 8.5 KB
分享到:
相关推荐
本文将详细讨论四种常见的单例实现方式:饿汉模式、懒汉模式、双重检查锁定(DCL)单例模式以及枚举单例。 1. **饿汉模式**: 饿汉模式是在类加载时就完成了实例化,避免了线程同步问题。这种方式简单且安全,但...
下面将详细介绍七种常见的单例模式实现方式,并结合多线程环境和反序列化测试进行讨论。 1. **饿汉式单例**: 这是最简单的单例实现,它在类加载时就创建了实例,因此是线程安全的。 ```java public class ...
接下来,我们讨论单例模式,它是限制类实例只能有一个的对象,通常用于管理共享资源: 1. **饿汉单例模式**:在类加载时就完成初始化,确保只有一个实例存在。饿汉单例模式是线程安全的,因为它在类加载时就完成了...
java 单例模式的实例详解 java 单例模式是指一种设计模式,确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在java中,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例。单例模式有以下特点...
在Java编程中,连接池和单例模式是两个非常重要的概念,它们对于高效地管理和使用数据库资源至关重要。这里我们将深入探讨这两个主题,并结合一个通用的BaseDao类来说明如何实现数据库的快速访问。 首先,连接池是...
接下来,我们将详细讨论单例模式的实现方式,包括懒汉式和饿汉式,以及如何通过同步枷锁来保证线程安全。 1. **懒汉式**(Lazy Initialization):懒汉式单例模式的特点是在第一次需要时才创建对象,即延迟初始化。...
### 单例模式详解 #### 概述与应用场景 单例模式是一种常用的设计模式,它的主要目的是确保某个类仅有一个实例...通过上述讨论,我们可以看到单例模式在不同场景下的适用性及其潜在问题,并学习到了相应的解决方案。
单例模式的关键在于限制类的实例化,防止多个实例的存在。 在Java中实现单例有多种方法,下面详细讨论给定文件中提到的五种方式: 1. **懒汉式(非线程安全)**: 这种实现方式延迟初始化,只有在第一次调用`...
在Java或C#等面向对象的语言中,单例模式通常通过私有构造函数和静态工厂方法来实现。例如,我们可以创建一个名为`Singleton`的类,其构造函数为私有,然后定义一个静态方法`getInstance()`用于返回唯一的实例。这样...
在这个场景中,我们讨论的是"游戏角色创建程序",并且使用了"单例模式"这一设计模式来实现。单例模式是软件设计模式中的一种,它确保一个类只有一个实例,并提供一个全局访问点。在Java编程语言中,单例模式常用于...
单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问...最后,DCL模式兼顾了线程安全和性能,是实现Java单例模式的首选。在实际开发中,应根据具体场景选择合适的方式。
通常,单例模式的讨论中会提到懒汉式(Lazy Initialization)、饿汉式(Eager Initialization)和登记式(Registry)。这里可能是指类的实例在程序启动时就已经创建,即饿汉式初始化,无论是否需要,实例都会被立即...
接下来,我们讨论“带有参数的单例模式”。在某些情况下,我们需要在创建单例时传入一些参数。这时,我们可以稍微修改上面的实现,引入一个私有的工厂方法来处理参数: ```java public class ...
在讨论多线程单例模式及并发访问之前,我们先来了解一些基本概念。 **进程**和**线程**是计算机科学中的两个核心概念,它们之间的关系紧密而复杂。 - **进程**:具有独立功能的程序在某个数据集合上的一次运行活动...
在Java语言中,实现单例模式主要有以下几种方式: 1. 饿汉式(Eager Initialization) 饿汉式单例模式在类加载的时候就已经进行了实例化,因此它不需要考虑多线程同步的问题。这种方式在类加载时就完成了初始化,...
下面将详细讨论单例模式的概念、实现方式以及双重检测机制。 首先,理解单例模式的基本概念。单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这样做的好处是避免了大量的实例化...
下面我们将详细讨论Java多线程实战之单例模式与多线程的实例详解。 一、立即加载/饿汉模式 立即加载/饿汉模式是在类创建的同时已经创建好一个静态的对象供系统使用,这种方式可以确保线程安全,因为对象是在类加载...
因此,我们将基于【标题】、【描述】以及【标签】来详细解释单例模式与简单工厂模式的相关知识点。 ### 单例模式 #### 定义 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。...
在讨论双重检查锁定失效的原因之前,让我们先从单例模式的基本实现开始,逐步深入。最简单的单例模式实现方式是将构造函数设为私有,并在类内创建一个静态的类实例,同时提供一个公共的静态方法来获取这个实例。这种...
通过静态类和静态方法等不同方式实现单例模式,并讨论了在大型程序中查找单例的方法。 - **建造者模式**(第37页):适用于需要构建复杂对象的情况,可以方便地构造不同类型的复杂对象。通过投资跟踪器的例子,演示...