四中方式实现单例模式

一:饿汉式单例模式

package com.zkn.newlearn.gof.singleton;

/**
 *
 * 饿汉式单例模式
 * @author zkn
 *
 */

public class SingletonTest01{

	/**
	 * 加载类时,立即加载对象,是没有延迟的。是天然的线程安全的
	 */
	private static SingletonTest01 singleton = new SingletonTest01();

	/**
	 *  构造器私有化
	 */
	private SingletonTest01() {

	}
	/**
	 * 返回这个对象
	 */
	public static SingletonTest01 getInstance(){

		return singleton;
	}

	public void test(){
		System.out.println("我是饿汉式单例模式");
	}

}

二:懒汉式单例模式

package com.zkn.newlearn.gof.singleton;

/**
 *
 * @author zkn
 *
 */

public class SingletonTest02 {

	private static SingletonTest02 singleton;

	/**
	 * 构造器私有化
	 */
	private SingletonTest02() {

	}

	public static synchronized SingletonTest02 getInstance(){

		if(singleton == null){
			singleton = new SingletonTest02();
		}
		return singleton;
	}

	public void test(){
		System.out.println("我是懒汉是单例模式");
	}
}

三:静态内部类

package com.zkn.newlearn.gof.singleton;

/**
 * 静态内部类  线程安全 延迟加载 调用效率高
 * @author zkn
 *
 */

public class SingletonTest04 {

	private static class SingletonClassInstance{
		private static final SingletonTest04 single = new SingletonTest04();
	}

	private SingletonTest04() {

	}

	public static SingletonTest04 getInstance() {

		return SingletonClassInstance.single;
	}

}

四:枚举(单元素)

package com.zkn.newlearn.gof.singleton;

/**
 *
 * 枚举实现单例 避免反射漏洞 jvm层面是安全的
 * @author zkn
 *
 */

public enum SingletonTest05 {

	/**
	 * 枚举元素本身就是单例
	 */
	INSTANCE;
}

 

时间: 2024-10-26 03:55:36

四中方式实现单例模式的相关文章

反射的方式破解单例模式

上篇文章中前两种单例实现方式可以通过反射来进行破解 package com.zkn.newlearn.test.gof; import static org.junit.Assert.*; import java.lang.reflect.Constructor; import org.junit.Test; import com.zkn.newlearn.gof.singleton.SingletonTest01; import com.zkn.newlearn.gof.singleton.S

as3单例模式的两种实现方式

式一:直接在构造函数里赋_instance值 package { public class MyClass { private static var _instance:MyClass; public function MyClass() { _instance = this; } public static function getInstance():MyClass { return _instance; } } } 方式二:常用的在getInstance()里根据需要才给_instance

《Android 源码设计模式解析与实战》——第2章,第2.6节单例模式的其他实现方式

2.6 单例模式的其他实现方式 2.6.1 懒汉模式 懒汉模式是声明一个静态对象,并且在用户第一次调用getInstance时进行初始化,而上述的饿汉模式(CEO类)是在声明静态对象时就已经初始化.懒汉单例模式实现如下. public class Singleton { private static Singleton instance; private Singleton () {} public static synchronized Singleton getInstance() { if

Java单例模式实现的几种方式_java

Java单例模式实现的几种方式 单例模式好多书上都是这么写的: public class SingleTon1 { private SingleTon1(){ } private static SingleTon1 instance = null; public static SingleTon1 getInstance(){ if(instance == null){ instance = new SingleTon1(); } return instance; } } 但是实际开发中是不会这

PHP单例模式的核心思想

Singleton Pattern(中文称单例模式),可以说是最容易理解的设计模式了,也充分体现了DRY (Don't Repeat Yourself)的思想. 单例模式的核心思想是:保证一个对象存在且仅允许存在一个实例,并提供一个全局访问方式. 单例模式的运作模型是:当对象第一次被请求时,创建这个对象的实例:之后的每次请求,仅传递已创建实例的句柄.与单例模式相对应的模式叫做Prototype(Java平台下)或者叫SingleCall(.NET平台下),在此种模式下,每次请求一个对象,都将新建

PHP单例模式详细介绍

  这篇文章主要介绍了PHP单例模式详细介绍,本文讲解了单例模式的概念.单例模式的特点.使用单例模式的原因及场景及PHP单例模式代码实例,需要的朋友可以参考下 单例模式的概念 单例模式是指整个应用中某个类只有一个对象实例的设计模式.具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 单例模式的特点 单例模式的主要特点是"三私一公": 需要一个保存类的唯一实例的私有静

Javascript单例模式概念与实例

前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式.代理模式.观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构. 本文将介绍Javascript模式中较为常见和实用的模式--单例模式,主要分为概念和实例部分.在介绍实例的同时也会对代码中额外的知识点进行讲解. 单例模式概念 首先什么是单例模式?可以这样理解:单例模式旨在保证一个类仅有一个实例,并提供一个全局的访问点. 可能有人还是不太理解单例的概念,那么你可

android设计模式之单例模式详解_Android

这是我们最常见的一类模式,对这一类模式有一个通用的特点就是: 封装创建的方式和过程. 这里所谓封装就是隐藏的意思,对对象的创建方法和过程不可见,或者是虚拟的过程. 隐藏创建方式,就是如单例,工厂方法,隐藏创建过程则是指builder,原型,至于抽象工厂,我认为他包含了以上两种. 我们想想一个对象的创建有哪些步骤? 1.创建什么东西?--接口定义 2.谁创建?        --决策类or帮助类 3.如何创建?     --how,创建过程 4.什么时候创建?    --创建时机的触发 由此可知,

PHP单例模式详解及实例代码_php实例

PHP单例模式详解 单例模式的概念 单例模式是指整个应用中某个类只有一个对象实例的设计模式.具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 单例模式的特点 单例模式的主要特点是"三私一公": 需要一个保存类的唯一实例的私有静态成员变量 构造函数必须声明为私有的,防止外部程序new一个对象从而失去单例的意义 克隆函数必须声明为私有的,防止对象被克隆 必须提供一个访