所谓单例必须满足
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设计模式之单例模式
JAVA设计模式之单例模式。 一篇文章带你快速了解!
java设计模式之单例模式,通过例子说明8种单例设计模式。
研磨设计模式之单例模式,牛人精华之作!!!!
细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解
java设计模式之单例模式详解,包含例子,详解。
JAVA设计模式之单例模式(完整版)1[定义].pdf
php设计模式之单例模式_.docx
php设计模式之单例模式代码_.docx
设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助
php设计模式之单例模式实例分析_.docx
PHP设计模式之单例模式__1.docx
单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放...
JAVA设计模式之单例模式(完整版)[归类].pdf
入名所示,该文件为最详细的Java单例模式讲解并附有讲解代码。主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免...
目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...