所谓单例必须满足
1.一个类只能有一个实例
2.实例只能由自己去创建
3.必须自行提供实例
单例可以分为饿汉式、懒汉式、注册式单例
下面是饿汉式单例模式的代码:
public class Singleton {
//定义唯一实例并初始化
private static final Singleton instance=new Singleton();
//私有构造器防止外部通过new实例化
private Singleton(){
}
//向全局提供唯一实例
public static Singleton getInstance(){
return instance;
}
}
备注:该类在加载时会调用私有构造器初始化唯一实例,另外构造器是私有的因而不能被继承。
下面是懒汉式单例模式的代码:
public class Singleton {
//定义唯一实例
private static Singleton instance=null;
//私有构造器
private Singleton(){
}
/**
* 加载类(静态加载器)的时候并没有初始化实例
* 而是在调用的时候才初始化实例
* 因而称为懒汉式单例
* 用synchronized关键字防止
* 同时多个线程调用创建多个实例
*/
public synchronized Singleton getInstance(){
if(null==instance)
instance=new Singleton();
return instance;
}
}
备注:该类在加载时会调用私有构造器初始化唯一实例,另外构造器是私有的因而不能被继承。
注册式单例类是为了克服饿汉、懒汉式单例不能被继承的缺点而设计的。
public class Singleton {
//定义唯一实例
private static HashMap m_instance=new HashMap();
static {
Singleton s=new Singleton();
m_instance.put(s.getClass().getName(), s);
}
//保护的构造器
protected Singleton(){
}
public static Singleton getInstance(String name){
if(name==null){
name="Singleton";
}
//如果hashmap中没有该单例类,则将其添加进去
if(!m_instance.containsKey(name)){
try{
//利用Java反射机制动态实例化该单例类
m_instance.put(name, Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return (Singleton)m_instance.get(name);
}
}
下面子类化该注册式单例类
public class SingletonChild extends Singleton {
public SingletonChild(){}
/**
* 静态工厂方法
*/
public static SingletonChild getInstance(){
return (SingletonChild)Singleton.getInstance("SingletonChild");
}
}
因为子类要继承父类,因此父类构造器必须是公开的。这样就有可能直接通过new来产生单例类而不通过父类的注册,这是注册式单例类的一个缺点.
分享到:
相关推荐
Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...
python 设计模式之单例模式
设计模式之单例模式详解 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 单例模式的实现主要是...
### 设计模式之单例模式 #### 概述 单例模式(Singleton Pattern)是软件设计模式中的一个重要组成部分,属于创建型模式之一。它保证一个类仅有一个实例,并提供一个全局访问点。单例模式的核心在于确保某个类只有...
通过研磨设计模式之单例模式的资料,你可以深入理解单例模式的原理、实现方式及其优缺点,进一步提升自己的编程技能和设计思维。学习并熟练掌握设计模式,对于成为一名优秀的Java开发者至关重要。
Java设计模式之单例模式详解 一、单例模式概览 单例模式(Singleton Pattern)是面向对象设计模式中的一种,属于创建型模式。它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式的核心在于控制...
单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...
细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解
### PHP设计模式之单例模式详解 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决特定类型的问题。PHP作为一种流行的服务器端脚本语言,同样可以从这些设计模式中受益。本文将详细介绍...
JAVA设计模式之单例模式(完整版)1[定义].pdf
单例模式是一种常用的设计模式,它的核心思想是在整个应用程序中,一个类只能有一个实例存在。单例模式常用于控制资源的共享,例如数据库连接池、日志服务等。单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及...
设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助
单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放...
本次我们将深入探讨两种设计模式——单例模式和装饰模式,它们在Java编程中都有着广泛的应用。 首先,让我们来理解“单例模式”。单例模式是一种创建型设计模式,其核心思想是保证一个类只有一个实例,并提供一个...
入名所示,该文件为最详细的Java单例模式讲解并附有讲解代码。主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免...
目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...
为了帮助大家快速和较好地理解JavaScript设计模式中的单例模式,本文对JavaScript的单例模式进行了分析并进行简易的代码演示,希望本文能够给有需要的人带来一点小小的帮助。
单例模式是软件设计模式中的经典模式之一,其主要目的是控制类的实例化过程,确保在应用程序的整个生命周期中,某个类只有一个实例存在。这样的设计通常适用于那些需要频繁创建和销毁,但资源消耗较大的对象,如...