- 浏览: 63794 次
- 性别:
- 来自: 上海
文章分类
最新评论
Singleton 模式的宗旨在于确保某个类只有一个实例,别且为之提供一个全局访问点。
为了防止其他工作人员实例化我们的类,可以为该类创建唯一一个构造器,并将构造器的可见
设置为私有。值得注意的是,如果我们创建了其他的非私有的构造器,或者根本没有为该类提
供构造器,那么其他人员还是能实例化我们的类。
如果不希望提前创建单例对象,我们可以等到第一次使用该单例对象的时候在创建它,即
滞后初始化。滞后初始化单例对象有两个理由:
1.也许在静态初始化时间,你没有关于如何初始化单例对象的足够信息。
2.选择滞后初始化单例的目的也许为了等待资源,诸如数据库连接,尤其是在某些特定会话中
不需要这个单例的应用程序中。
如果在多线程环境中对单例采用滞后初始化,那么我们必须小心防止多个线程同时初始化该
单例。Singleton 有以下形式:
1.不支持多线程:
public class Singleton {
//** * 单线程 开始
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
// ** * 单线程 结束
}
2.支持多线程:
public class Singleton {
// ** * 多线程 开始
private static Singleton instance = null;
private static Object classlock = Singleton.class;
private Singleton() {
}
public static Singleton getInstance() {
synchronized (classlock) {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
// ** * 多线程 结束
简便方式:
public class Singleton {
// ** * 多线程 开始
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// ** * 多线程 结束
}
//静态内部类
public class Singleton {
private static class LazyHolder {
private static Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
为了防止其他工作人员实例化我们的类,可以为该类创建唯一一个构造器,并将构造器的可见
设置为私有。值得注意的是,如果我们创建了其他的非私有的构造器,或者根本没有为该类提
供构造器,那么其他人员还是能实例化我们的类。
如果不希望提前创建单例对象,我们可以等到第一次使用该单例对象的时候在创建它,即
滞后初始化。滞后初始化单例对象有两个理由:
1.也许在静态初始化时间,你没有关于如何初始化单例对象的足够信息。
2.选择滞后初始化单例的目的也许为了等待资源,诸如数据库连接,尤其是在某些特定会话中
不需要这个单例的应用程序中。
如果在多线程环境中对单例采用滞后初始化,那么我们必须小心防止多个线程同时初始化该
单例。Singleton 有以下形式:
1.不支持多线程:
public class Singleton {
//** * 单线程 开始
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
// ** * 单线程 结束
}
2.支持多线程:
public class Singleton {
// ** * 多线程 开始
private static Singleton instance = null;
private static Object classlock = Singleton.class;
private Singleton() {
}
public static Singleton getInstance() {
synchronized (classlock) {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
// ** * 多线程 结束
简便方式:
public class Singleton {
// ** * 多线程 开始
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// ** * 多线程 结束
}
//静态内部类
public class Singleton {
private static class LazyHolder {
private static Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
发表评论
-
struts2升级到struts2.3.32(报错、找不到action)
2017-03-20 17:32 946struts2 低版本有漏洞问题,升级到struts2.3.3 ... -
mybatis 插件分页
2013-11-08 18:36 960Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录 ... -
中等数据量的数据去重
2013-09-05 10:54 595最近遇到去重的问题,在此写一下处理的方法! 场景:短信平台有 ... -
部署Openfire源码
2013-07-08 15:39 726部署Openfire源码 1. 获取O ... -
log4j输出多个自定义日志文件、log4j 多进程不同日志文件
2013-05-06 14:09 2403最近在用多个线程走多个任务,但是日志用一个文件总有的线程输出不 ... -
spring与mybatis三种整合方法
2012-09-28 13:42 845以下原文摘自 http://www.cnblogs.com/t ... -
java 获取客户端MAC地址
2012-07-05 17:53 1232从网上查找资料java/jsp获得客户端(IE)网卡MAC地址 ... -
sping bean 作用域
2012-07-02 19:47 915ingleton:返回bean的同一个 ... -
struts1中的不同的form配置形式
2010-08-12 13:56 11631.先看看我们以前使用FormBean的方式 继承Actio ... -
Java中用URLConnection和HttpsURLConnection访问的问题
2010-07-29 15:12 2206虽然用的不多,但是还是要收藏!!!积累中.... 在web应用 ... -
StringUtils工具类的常用方法
2010-07-29 14:11 736StringUtils 方法的操作对象是 java.lang. ... -
tomcat 热部署
2010-07-29 09:56 1258在tomcat中支持热部署有 ... -
tomcat部署多个项目
2010-07-21 19:53 17351最近有个项目需要在tomcat部署多个项目:(个人解决方案) ... -
删除集合重复的元素
2010-07-21 18:06 906import java.util.Arrays; im ... -
求两日期之间的天数
2010-07-21 17:59 9551. 以系统当前日期为起 ... -
最近面试中sql题
2010-07-10 21:14 1108一.SQL问答题 SELECT * FROM TABLE ... -
hibernate和ibatis
2010-07-05 21:07 751简介 iBATIS一词来源 ... -
oracle 锁概念
2010-07-05 18:38 1153希望能与大家共同分享。本人还是不太懂,但是还是收藏一下,以后摸 ... -
表单提交中Get和Post方式的区别
2010-07-05 14:09 959表单提交中Get和Post方式的区别有6点: 1. ge ... -
hibernate 中Criteria 和CriteriaSpecification 的应用
2010-07-02 16:51 2654设计上可以灵活的根据 ...
相关推荐
**C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...
### Java的Singleton模式详解 #### 一、Singleton模式概述 Singleton模式是一种常用的设计模式,在Java中主要用于确保一个类只有一个实例,并提供一个全局访问点。这种模式对于管理共享资源(如数据库连接池、...
《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...
**Singleton 模式详解** Singleton 是一种在软件工程中广泛使用的创建型设计模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要频繁实例化然后销毁的对象,或者当实例化一个...
设计模式概述与 Singleton 模式详解 在软件设计中,设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 设计模式可以...
在提供的"1.Singleton 单件(创建型模式).wmv"视频文件中,可能详细讲解了Singleton模式的概念、实现方式、优缺点以及在C#中的具体应用实例,包括如何在实际项目中适当地使用和避免滥用Singleton模式。观看该视频可以...
### Singleton Pattern 单例模式应用详解 #### 一、单例模式概述 单例模式(Singleton Pattern)是一种常用的软件设计模式,在系统中确保某个类只有一个实例,并提供一个全局访问点。这种模式通常用于控制资源的...
在Android中,Singleton模式的应用场景包括但不限于: 1. 应用程序配置管理:例如,一个AppConfig类用于存储和管理应用的全局配置信息。 2. 数据库连接管理:在多线程环境下,共享数据库连接池以提高性能和减少资源...
在Python中,实现Singleton模式有多种方法。以下将详细讲解三种常见的实现方式:装饰器、闭包和元类。 1. 装饰器方式: 装饰器是Python语言中的一大特色,它允许我们动态地修改函数或类的行为。在实现Singleton...
#### 四、SingleTon单例模式实现详解 以下是对给定的部分代码进行详细解析: ```java public class SingleTon { // 定义一个私有的静态全局变量来保存该类的唯一实例 private static SingleTon singleTon; // ...
详解单例模式及C++源代码,singleton模式在软件开发中使用广泛。
Head First 设计模式是一本非常受欢迎的设计模式书籍,通过直观易懂的方式讲解了23种设计模式,包括单例模式在内的创建型、结构型和行为型模式。阅读这本书籍可以帮助开发者更好地理解和运用设计模式,提高代码质量...
### 单件模式(Singleton Pattern)详解 #### 概述 单件模式是软件设计模式中最为基础且应用广泛的一种模式。它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。此模式通常用于那些需要频繁创建、消耗...
**PHP7-Singleton模式详解** Singleton模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在PHP7中,Singleton模式的应用主要在于控制类的实例化过程,防止因多次实例化而导致的资源浪费,同时...
下面我们将详细讲解如何使用元类`Singleton`来实现Singleton模式: 首先,我们定义一个名为`Singleton`的元类,它重写了`__call__`、`__new__`和`__init__`方法: 1. `__call__`方法:当试图像函数一样调用类时...
- 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。 - 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式(Abstract Factory):...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式常用于管理共享资源或控制类的实例化过程,以提高性能、节约系统资源,特别是在整个应用程序生命周期内只需要一...
Java 中 23 种设计模式详解 在软件设计中,设计模式是解决特定问题的通用解决方案。 Java 中有 23 种常见的设计模式,下面将对每种设计模式进行详细的解释: 1. 抽象工厂模式(Abstract Factory) 抽象工厂模式...
单例模式详解 单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细...