马士兵设计模式笔记1之单例的几种实现方式
2016-04-07 12:23
681 查看
//第一种 classic
public class Singleton{
private static Singleton uniqueInstance;
//other useful instance variables here
private Singleton(){}
public static Singleton getInstance(){
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
return uniqueInstance;
}
}
//第二种 synchronize
public class Singleton{
private static Singleton uniqueInstance;
//other useful instance variables here
private Singleton(){}
public static synchronized Singleton getInstance(){
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
return uniqueInstance;
}
}
//第三种 eagerly create
public class Singleton{
private static Singleton uniqueInstance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return uniqueInstance;
}
}
//第四种 双检锁
public class Singleton{
private volatile static Singleton uniqueInstance;
private int field1,field2;
private Singleton(){
//initialization
}
public static Singleton getInstance(){
if(uniqueInstance==null){
synchronized (Singleton.class){
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
}
}
return uniqueInstance;
}
}
//第五种 lazy initiaization holder class
public class SingletonFactory{
private static class SingletonHolder{
public static Singleton instance=new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
//第六种 Enum Singleton
public enum Elvis{
INSTANCE;
public void leveTheBuiling(){
//.............
}
}
public class Singleton{
private static Singleton uniqueInstance;
//other useful instance variables here
private Singleton(){}
public static Singleton getInstance(){
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
return uniqueInstance;
}
}
//第二种 synchronize
public class Singleton{
private static Singleton uniqueInstance;
//other useful instance variables here
private Singleton(){}
public static synchronized Singleton getInstance(){
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
return uniqueInstance;
}
}
//第三种 eagerly create
public class Singleton{
private static Singleton uniqueInstance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return uniqueInstance;
}
}
//第四种 双检锁
public class Singleton{
private volatile static Singleton uniqueInstance;
private int field1,field2;
private Singleton(){
//initialization
}
public static Singleton getInstance(){
if(uniqueInstance==null){
synchronized (Singleton.class){
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
}
}
return uniqueInstance;
}
}
//第五种 lazy initiaization holder class
public class SingletonFactory{
private static class SingletonHolder{
public static Singleton instance=new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
//第六种 Enum Singleton
public enum Elvis{
INSTANCE;
public void leveTheBuiling(){
//.............
}
}
相关文章推荐
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
- Android学习——ActivityManager与Proxy模式的运用
- What are some good libraries for dynamic Bayesian networks
- 【Python】 做一个简单的 http server
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-004嵌套组件的注解AttributeOverrides
- 理解angular中的module和injector,即依赖注入
- 快速排序(附Java实现和分析)
- dgh
- 14年安徽省赛数论题etc.
- linux安全第七周总结
- PHP中PDO的事务处理分析
- tomcat server需要重启的时刻
- [undefine reference to...]c++ 已经引用头文件的情况编译显示未定义
- android GMS认证之CTS 常用命令
- C语言字母频率统计
- 2016-4-7
- 深入理解计算机第七章
- 关于Office 365 域名绑定问题
- 为什么构造函数不能是虚函数而析构函数可以
- 【SVN】中检出(check out) 和导出(export) 的区别