java设计模式(1) - 单例模式
2015-08-06 20:47
393 查看
最长用设计模式-单例模式,常用的有三种实现方式:
饿汉式,懒汉式, 登记式
1. 饿汉式:在变量声明时实例化对象。(线程安全)
2.懒汉式: 在变量用的时候实例化对象,线程不安全,需要加锁。
3.登记式:在对象内部维护一个map集合,对象实例时初始化map,并把对象实例放
到map中,第次从map中取对象。
==================================================================
/**
* 饿汉式
*
* @author jiangwei
*
*/
public class SingleInstance1 {
//1.实例化对象
private static SingleInstance1 instance = new SingleInstance1();
//2.私有化构造方法
private SingleInstance1() {
}
//3.暴露getInstance方法
public static SingleInstance1 getInstance() {
return instance;
}
}
======================================================================
/**
* 懒汉式
* @author jiangwei
*
*/
public class SingleInstance2 {
//1.声明对象
private static SingleInstance2 instance = null;
//2.私有化构造方法
private SingleInstance2() {
}
//3.暴露getInstance方法
public synchronized static SingleInstance2 getInstance() {
if(instance == null) {
//实例化对象
instance = new SingleInstance2();
}
return instance;
}
}
==============================================================
/**
* 3.登记式 : 单例容器
* @author jiangwei
*
*/
public class SingleInstance3 {
private static Map<String, Object> map = new HashMap<String, Object>();
private SingleInstance3() {};
public static Object getInstance(String key) {
if(map.get(key) == null) {
try {
Object object = Class.forName(key);
map.put(key, object);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(key);
}
}
饿汉式,懒汉式, 登记式
1. 饿汉式:在变量声明时实例化对象。(线程安全)
2.懒汉式: 在变量用的时候实例化对象,线程不安全,需要加锁。
3.登记式:在对象内部维护一个map集合,对象实例时初始化map,并把对象实例放
到map中,第次从map中取对象。
==================================================================
/**
* 饿汉式
*
* @author jiangwei
*
*/
public class SingleInstance1 {
//1.实例化对象
private static SingleInstance1 instance = new SingleInstance1();
//2.私有化构造方法
private SingleInstance1() {
}
//3.暴露getInstance方法
public static SingleInstance1 getInstance() {
return instance;
}
}
======================================================================
/**
* 懒汉式
* @author jiangwei
*
*/
public class SingleInstance2 {
//1.声明对象
private static SingleInstance2 instance = null;
//2.私有化构造方法
private SingleInstance2() {
}
//3.暴露getInstance方法
public synchronized static SingleInstance2 getInstance() {
if(instance == null) {
//实例化对象
instance = new SingleInstance2();
}
return instance;
}
}
==============================================================
/**
* 3.登记式 : 单例容器
* @author jiangwei
*
*/
public class SingleInstance3 {
private static Map<String, Object> map = new HashMap<String, Object>();
private SingleInstance3() {};
public static Object getInstance(String key) {
if(map.get(key) == null) {
try {
Object object = Class.forName(key);
map.put(key, object);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(key);
}
}
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础