如果要保证系统里一个类最多自能存在一个实例,我们就要使用单例模式
最简单的单例模式
package com.model.sigleton;
public class Singleton {
private static Singleton singleton = new Singleton();
/**
* 唯一的构造方法被private修饰,表示外部无法通过构造反法创建对象
*/
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
}
进阶-延迟创建且线程安全
出于性能方面考虑,我们希望延迟实例化单例对象(Static属性在加载类时就会被初始化),只有在第一次使用该类的实例时才去实例化,我们应该怎么办呢?
package com.model.sigleton;
/**
*
* @author leo Chen
*
*/
public class UnThreadSafeSingelton {
private static UnThreadSafeSingelton instatnce;
// variables and constructors...
/**
*
* @return
*/
public static synchronized UnThreadSafeSingelton getInstance() {
if (instatnce == null) {
instatnce = new UnThreadSafeSingelton();
}
return instatnce;
}
}
doublecheck locking模式
package com.model.sigleton;
public class DoubleCheckSingleton {
private volatile static DoubleCheckSingleton instantnce = null;
// constructors
public static DoubleCheckSingleton getInstance() {
if (instantnce == null) {// check if it is created.
synchronized (DoubleCheckSingleton.class) {
if (instantnce == null) {
instantnce = new DoubleCheckSingleton();
}
}
}
return instantnce;
}
}
lazyLoadedSingleton
package com.model.sigleton;
public class LazyLoadedSingleton {
private LazyLoadedSingleton() {
}
private static class LazyHolder {
private static final LazyLoadedSingleton LAZY_LOADED_SINGLETON = new LazyLoadedSingleton();
}
public static LazyLoadedSingleton getInstance() {
return LazyHolder.LAZY_LOADED_SINGLETON;
}
}
当JVM加载lazyLoadedSingleton类时,由于该类没有static属性,所以加载完成后便即可返回,只有第一次调用getInstance()方法时,JVM才会加载LazyHolder,由于它包含static属性,所以会先初始化这个变量,根据前面过程介绍,我们知道此过程并不会出现并发问题(JLS保证),这样即实现了一个既保证现成安全又支持延迟加载的单例模式
Singleton的序列化
package com.model.sigleton;
import java.io.Serializable;
public class Singleton implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private static Singleton singleton = new Singleton();
/**
* 唯一的构造方法被private修饰,表示外部无法通过构造反法创建对象
*/
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
private Object readResolve() {
return singleton;
}
}
分享到:
相关推荐
设计模式总结-模板设计模式,单例模式(singleTon)
设计模式C++学习之单例模式(Singleton)
深入浅出Singleton,详细掌握单例模式
在Java应用中,单例对象能保证在一个...3、有些像交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了,只有使用单例模式,才能保证核心交易服务器独立控制整个流程。 CSDN代码的详细解释。
简单的单例模式举例Singleton 分为恶汉式 懒汉式
设计模式里面的单例模式程序 package com.rrppff; public class Singleton { private static String name; public static String getName() { return name; } public static void setName(String name) { ...
NULL 博文链接:https://linxingliang.iteye.com/blog/1217811
java Singleton单例模式 java Singleton单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 学习demo
单例设计模式Singleton1
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...
此示例展示了Qml 的单例模式(类似全局对象,只生成一次实例,可全局使用) surfsky.cnblogs.com
单例模式的特点有三: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,...
4、单例模式(Singleton Pattern) 用意:仅允许生成一个对象时
单例模式 Singleton 单例模式线程安全问题和拓展
Java面向对象(高级)-- 单例(Singleton)设计模式
php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function ...
设计模式系列之01-单例模式(Singleton模式),很好的资源,理论实践结合讲述,逐步更新
本文实例讲述了JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能。分享给大家供大家参考,具体如下: 单例模式 单例模式的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中...
singleton 单例 java 详细介绍了单例模式的使用,很不错的单例模式的介绍