`

java设计模式--[創建模式]--单例模式[singleton pattern]

阅读更多

一. 單例: 確保一個類只有一個實例,并且提供一個全局訪問點


二. 單例模式的類中, 要有私有的構造器,一個靜態方法和一個靜態變量

 

三.示例如下:

 

    1. 經典的單例模式

 

package creationalPattern.singleton.singleton_1;
/**
 * 單例模式(延遲創建)
 * @author Liyongbin
 * @adte 2011-02-06
 *
 */
public class Singleton {
	//私有類成員(保存類的唯一實例)
	private static Singleton uniqueInstance;
	//私有構造器(只有Singleton類內才可以調用構造器)
	private Singleton(){};
	//全局訪問點(用getInstance()方法實例化對象,并返回實例)
	public static Singleton getInstance(){
		if (null==uniqueInstance) {
			uniqueInstance=new Singleton();
		} 
		return uniqueInstance;
	}
}

 注意: 此經典的單例實現,不適用于多線程環境;

 

2. 使用同步方法,解決單例的多線程問題

 

package creationalPattern.singleton.singleton_2;
/**
 * 單例模式(延遲創建)_支持多線程(使用同步方法)
 * @author Liyongbin
 * @adte 2011-02-06
 *
 */
public class Singleton {
	//私有類成員
	private static Singleton uniqueInstance;
	//私有構造器
	private Singleton(){};
	//全局訪問點
	public static synchronized Singleton getInstance(){
		if (null==uniqueInstance) {
			uniqueInstance=new Singleton();
		} 
		return uniqueInstance;
	}
}

 注意: 如果你總是頻繁地創建(getInstance()) 單例的話,以上方法就不適用了,可以採取以下方法;

 

3. 非延遲單例模式

 

package creationalPattern.singleton.singleton_3;
/**
 * 單例模式(非延遲(eagerly)創建)
 * @author Liyongbin
 * @adte 2011-02-06
 *
 */
public class Singleton {
	//私有的類成員
	private static Singleton uniqueInstance=new Singleton();
	//私有的構造器
	private Singleton(){};
	//全局的訪問點
	public static Singleton getInstance(){
		return uniqueInstance;
	}
}

 

4. 使用雙重檢查來確保單例的安全,高效運行

 

package creationalPattern.singleton.singleton_4;

/**
 * 單例模式((非延遲(eagerly)創建)使用雙重检查機制--volatile
 * 優化性能,大大地減少getInstance()時間耗費
 * @author Liyongbin
 * @adte 2011-02-06
 */
public class Singleton {
	//私有的類成員
	private volatile static Singleton uniqueInstance;
	//私有的構造器
	private Singleton(){};
	//全局的訪問點
	//检查实例,不存,就進入同步塊
	public static Singleton getInstance(){
		//只有第一次才徹底執行這里的代碼
		if (null==uniqueInstance) {
			synchronized (Singleton.class){
				//進入同步塊后,再檢查一次,為null才創建實例
				if (null==uniqueInstance) {
					uniqueInstance=new Singleton();
				}
			}
		}
		return uniqueInstance;
	}
}

 注:此方法僅適用于JDK1.4或更高的版本
分享到:
评论

相关推荐

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    设计模式-Java单例模式的各种实现实例

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。这种模式通常用于需要频繁地创建和销毁的对象,以减少系统性能开销。 单例模式的优点: ...

    ava常用设计模式-单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一实例。 单例模式有多种实现...

    Singleton pattern单例模式应用

    单例模式(Singleton Pattern)是一种常用的软件设计模式,在系统中确保某个类只有一个实例,并提供一个全局访问点。这种模式通常用于控制资源的消耗,比如数据库连接、线程池等,以及确保某个系统配置的一致性。 #...

    JAVA design pattern-java设计模式

    总结来说,"JAVA design pattern-java设计模式"的CHM文件是深入学习和理解Java设计模式的宝贵资源,通过学习和应用这些模式,开发者可以提高其代码质量,优化系统架构,从而更好地应对复杂的软件开发挑战。

    java-thread-safe-singleton-pattern.rar_starvation

    在Java编程中,单例模式是一种常用的创建型设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。本主题探讨的是线程安全的单例模式实现,特别是饥饿模式(Starvation)和延迟加载(Lazy Initialization)...

    单例模式 Singleton Pattern

    单例模式是一种常见的设计模式,属于创建型模式之一。这种模式的核心在于确保某个类只有一个实例存在,并且提供一个全局访问点来获取该实例。单例模式在Java开发中尤其常见,因为它能够帮助开发者控制对象的创建过程...

    design-pattern-java.pdf

    工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...

    创建型模式之单例模式(Singleton Pattern)

    单例模式是软件设计模式中的一种,属于创建型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者缓存服务等。 单例模式的核心...

    优秀的设计模式示例-单例模式

    单例模式是软件设计模式中的一种经典模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。以下是对单例模式的详细...

    设计模式课程设计---使用5个以上不同的设计模式完成(java)

    在本设计模式课程设计中,我们重点探讨了五个核心的设计模式:原型模式、单例模式、抽象工厂模式、代理模式和建造者模式。这些模式在Java编程中具有广泛的应用,能够帮助开发者创建更加灵活、可扩展和易于维护的代码...

    设计模式 之 “单例模式[Singleton Pattern]”

    **单例模式(Singleton Pattern)**是软件设计模式中的一种基础模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、数据库连接池等,这些都...

    java之 ------ 几种常见的简单设计模式

    单例模式是Java中最基础也是最常用的设计模式之一,它帮助我们有效地管理程序中的共享资源。无论是简单的饿汉式还是复杂的懒汉式,开发者可以根据具体的应用场景选择最适合的方式实现。随着并发编程的需求日益增加,...

    java-design-patterns-master_JAVAdesignpattens_java_design_

    《Java设计模式实战详解》 在Java编程领域,设计模式是一种通用、可重用的解决方案,用于解决在软件设计中常见的问题。这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在...

    java设计模式之单例模式详解

    Java设计模式之单例模式详解 一、单例模式概览 单例模式(Singleton Pattern)是面向对象设计模式中的一种,属于创建型模式。它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式的核心在于控制...

    JAVA单例模式的几种实现方法

    单例模式是软件开发中常用的设计模式之一,用于确保一个类只有一个实例,并提供一个全局访问点。Java中实现单例模式的方法有很多种,每种方法都有其适用场景和优缺点。选择合适的实现方式需要根据实际需求和应用场景...

    JAVA设计模式中的单例模式

    ### JAVA设计模式中的单例模式解析 在软件工程与编程领域,设计模式是解决特定问题的一套被广泛接受的解决方案。其中,单例模式(Singleton Pattern)是一种常用的创建型模式,其核心在于确保一个类只有一个实例,...

    java设计模式ppt

    ### Java设计模式详解 在软件开发领域,设计模式是一种被广泛采用的解决方案,用来解决常见的设计问题。设计模式不仅能够帮助开发者写出可复用、可维护的代码,还能提高团队间的沟通效率。以下是对给定文件中提到的...

Global site tag (gtag.js) - Google Analytics