`
ayaoxinchao
  • 浏览: 80441 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

设计模式——单例模式

 
阅读更多

定义

 

       Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

 

分析

 

       从定义中可以看出单例的要点有三个:一是某个类只能有一个实例;二是必须自行创建这个实例;三是必须自行向系统提供这个实例。

       实现角度看就是要有以下三点:一是类只提供私有的构造函数(方法);二是类定义中含有一个该类的私有静态对象;三是该类提供了一个共有的函数(方法)用于创建或获取它本身的静态私有对象。

 

动机

 

       1.节约内存

       2.避免当多个实例存在的时候,引起程序逻辑错误

 

实现1_懒汉方式

public class Singleton1 {
	
	private static Singleton1 singleton = null;
	
	private Singleton1() {
		
	}
	
	public static Singleton1 getInstance () {
		if (singleton == null) {
			singleton = new Singleton1();
		}
		return singleton;
	}

}

 

实现2_恶汉方式(线程安全)

public class Singleton2 {
	
	private static Singleton2 singleton = new Singleton2();
	
	private Singleton2() {
		
	}
	
	public static Singleton2 getInstance() {
		return  singleton;
	}

}

实现3_双重锁方式(线程安全)

public class Singleton3 {
	
	private static Singleton3 singleton = null;
	
	private Singleton3() {
		
	}
	
	/**
	 * 这个模式将同步内容下方到if内部,提高了执行的效率,
	 * 不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
	 * @author Perlin
	 * @date 2014-6-30
	 * @return
	 */
	public static Singleton3 getInstance () {
		if (singleton == null) {
			synchronized (Singleton3.class) {
				if (singleton == null) {
					singleton = new Singleton3();
				}
			}
		}
		return singleton;
	}

}

 

2
0
分享到:
评论
4 楼 772EF01 2014-07-01  
cd_huangbo 写道
兄弟,你这些单例除了恶汉能保证单例,其他的都不能,连双重检锁都不能,
关于双重检锁见分析:http://wenku.baidu.com/link?url=lNb6DF8Yuv9HRyXyohsMWChexZYQN7Gdt2jM0RiDZXAhKupBIT6g-1vxn_wkJyjwY9lz1Cohf7nOSD1pN7zpW-o_TymHQ65a_PewiSG3WYy


为什么一定要用双重锁呢


private static Foo _instance = null;
public static Foo getInstance() {
  if(_instance==null) {
     Foo f;
     synchronized(Foo.class) {
        f = _instance;
        if( f == null ) {
             f = new Foo();
        }
        _instance = f;
     }
  }
  return _instance;
}
这样是不是也可以保证单例实现
3 楼 java_web_hack1 2014-07-01  
还有一种内部类的方式,撸主可以去研究一下
2 楼 高军威 2014-07-01  
cd_huangbo 写道
兄弟,你这些单例除了恶汉能保证单例,其他的都不能,连双重检锁都不能,
关于双重检锁见分析:http://wenku.baidu.com/link?url=lNb6DF8Yuv9HRyXyohsMWChexZYQN7Gdt2jM0RiDZXAhKupBIT6g-1vxn_wkJyjwY9lz1Cohf7nOSD1pN7zpW-o_TymHQ65a_PewiSG3WYy

高大上  惊出我一身冷汗啊
1 楼 cd_huangbo 2014-07-01  
兄弟,你这些单例除了恶汉能保证单例,其他的都不能,连双重检锁都不能,
关于双重检锁见分析:http://wenku.baidu.com/link?url=lNb6DF8Yuv9HRyXyohsMWChexZYQN7Gdt2jM0RiDZXAhKupBIT6g-1vxn_wkJyjwY9lz1Cohf7nOSD1pN7zpW-o_TymHQ65a_PewiSG3WYy

相关推荐

Global site tag (gtag.js) - Google Analytics