Java singleton是指这样的类,它只能实例化一次,singleton通常被用来代表那些本质上具有唯一性的系统组件。
实现singleton有两种方法:这两种方法都要把构造函数保持为私有的,并且提供一个静态成员,以便允许客户能够访问该类唯一的实例。
第一种方法,共有静态成员是一个final域:
// Singleton with final field
public class Singleton {
private static final Singleton _INSTANCE = new Singleton();
private Singleton(){}
}
私有构造函数仅被调用一次,用来实例化共有的静态final域Singleton._INSTANCE,由于缺少public或者protected构造
函数,所以保证了Singleton的全局唯一性,一旦Singleton类被实例化之后,只有一个Singleton实例存在,客户的任何行为都不会改
变这一点。
第二种方法提供了一个公有的静态工厂方法,而不是公有的静态final域:
// Singleton with static method
public class Singleton {
private static final Singleton _INSTANCE = new Singleton();
private Singleton(){}
public synchronized static Singleton getInstance() {
return _INSTANCE;
}
}
所有对于静态方法Singleton._INSTANCE的调用,都会返回同一个对象引用,所有,不会有别的Singleton实例被创建。
第二种方法的好处在于利用JVM特性(内联)来提高了点效率。
如果遇到需要Singleton类变成可序列化(serializable),仅仅在声明中加上"implements
Serializable"是不够的,为了维护singleton性,必须提供一个readResolve方法,否则的话,一个序列化的实例在每次反序列
化的时候,都会导致创建一个新的实例,解决方法:
private Object readResolve() throws ObjectStreamException {
return _INSTANCE;
}
分享到:
相关推荐
java Singleton单例模式 java Singleton单例模式
简单的单例模式举例Singleton 分为恶汉式 懒汉式
Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()...
java singleton 不解释不解释不解释不解释
附件中是本文样例的源代码工程包,使用Eclipse导入即可。 博文链接:https://balan.iteye.com/blog/164873
Java的Singleton模式代码(免资源分),你会发现Java的Singleton模式真的很有趣,原来程序还可以这样写。
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
Singleton在Java中的应用,实例介绍
Java的几个练习,reflect,singleton,DomAndSax
singleton pattern 的定义 主要应用方法 优缺点 通过代码 具体分析解释
文件名 : Singleton1.java 文件名 : Singleton2.java 文件名 : Singleton3.java 文件名 : Singleton4.java 文件名 : Singleton5.java 文件名 : Singleton6.java 文件名 : TestSingleton1.java 文件名 : ...
Java的Singleton容器! 用法: 用@Singleton注释为您的课程添加注释(注意:它需要一个布尔参数'lazy',指示如何加载单例) 创建并初始化Singlio对象“ Singlio singlio = new Singlio()。initialize();” ...
c++ singleton单例模式
Java面向对象(高级)-- 单例(Singleton)设计模式
在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这可以节省一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率...
DSE_Java_Singleton 将此程序与DataStax DSE Java驱动程序手册中提供的链接一起使用,以初步了解创建程序和设置DSE会话。 背景 在此示例中,DSE会话(您将通过其连接到DSE的对象)已设置为单例类。 在我们的示例...
DataSource的单态模式(SingleTon)程序---马克-to-win java视频 数据源 单态模式 dataSource Singleton
18.Singleton.java java设计模式之单例模式 19.Factory.java 设计模式之工厂模式 20.Swing.java 介绍了java的图形应用 --课程包括了java SE的大部分常用类及其简单用法 如果你对java,android感兴趣,都可以加入...