`

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或更高的版本
分享到:
评论

相关推荐

    单例模式 Singleton Pattern

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...

    design-pattern-java.pdf

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

    33种JAVA设计模式DEMO

    单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器...

    设计模式_单例模式.zip

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 学习demo

    单例设计模式.pdf

    单例模式(Singleton Pattern)是 Java 中最常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板...

    design-pattern-test:设计模式学习

    design-pattern-test 设计模式学习练习 模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns) 序号 模式&描述 包括 1 创建型模式---...

    Java设计模式,并加上个人理解

    1. 设计模式 1.1 含义 1.2 作用 1.3 设计原则 1.4 分类 2. 简单工厂模式 (SimpleFactoryPattern) 3. 工厂方法模式 (Factory Method) 4. 单例模式 (Singleton) 5. 抽象工厂模式 (Abstract Factory) 6. ...

    JAVA设计模式.rar

    单例模式【SINGLETON PATTERN】  多例模式【MULTITION PATTERN】  工厂方法模式【FACTORY METHOD PATTERN】 抽象工厂模式【ABSTRACT FACTORY PATTERN】 门面模式【FACADE PATTERN】  适配器模式...

    uu-design-pattern:23种设计模式案例

    23种设计模式演示代码文件结构图gof23 |- creational(创建型模式) |- simplefactory 简单工厂模式案例 |- factorymethod 工厂方法模式案例 |- abstractfactory 抽象工厂模式案例 |- builder 建造者模式案例 |- ...

    Java聊天室 观察者模式和单例模式

    基于观察者模式和单例模式的java聊天室 面向对象设计,抽象,封装,代理,组合和继承 适合理解java面向对象,socket编程,观察者模式和单例模式

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举)

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举) ...单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一

    java餐饮管理系统源码6-design_patterns:设计模式

    Java设计模式书籍: 大话设计模式 Head First 设计模式 设计模式的类型: 总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、 行为型模式...

    单例模式的Java示例代码

    通过对配置文件进行读写的例子,演示了如何应用单例模式来设计类及其之间的关系。

    Android SingletonPatternDemo

    Java据说有23种设计模式,Android的设计模式肯定是由Java来引申出来的。这里不讨论有多少人全会,有多少种设计模式会使用到,我们来讲下其中用得最多的也就是人人都知道的单例模式。 这里是一个简单的Singleton...

    23种设计模式知识要点--更多Java进阶 www.cx1314.cn1

    1.单例模式(Singleton Pattern) 2.工厂模式 3.抽象工厂模式(Abstract Factory 4.模板方法模式(Template Met

    Object-Oriented-Analysis-Design:面向对象的分析和设计(JAVA语言)设计模式,Java GUI

    家庭作业的主题: HW01: PART1->策略设计模式PART2->观察者设计模式PART3->装饰器设计模式HW02: PART1->单例设计模式PART2->迭代器设计模式PART3->状态和观察者模式PART4->代理设计模式中期: PART1->抽象工厂...

Global site tag (gtag.js) - Google Analytics