单例模式的几种设计方法

原创 2018年04月17日 11:30:34
package test1;
//饿汉模式
/*public class SingleDemo {
	private static SingleDemo instance = new SingleDemo();
	private SingleDemo(){}
	public static SingleDemo getinstance(){
		return instance;
	}
}*/

//懒汉模式
/*public class SingleDemo{
	private static SingleDemo instance=null;
	private SingleDemo(){}
	public static SingleDemo getinstance(){
		if(instance==null)
			instance = new SingleDemo();
		return instance;
	}
}*/

//懒汉加锁-线程安全
/*public class SingleDemo{
	private static SingleDemo instance=null;
	private SingleDemo(){}
	public static synchronized SingleDemo getinstance(){
		if(instance==null)
			instance=new SingleDemo();
		return instance;
	}
}*/
//双重校验+锁机制
/*加锁的懒汉模式看起来即解决了线程并发问题,又实现了延迟加载,然而它存在着性能问题,
依然不够完美。synchronized修饰的同步方法比一般方法要慢很多,如果多次调用getInstance(),
累积的性能损耗就比较大了。因此就有了双重校验锁,先看下它的实现代码。*/
/*public class SingleDemo{
	private static SingleDemo instance=null;
	private SingleDemo(){}
	public static SingleDemo getinstance(){
		if(instance==null)
			synchronized(SingleDemo.class){//这个括号必须加
				if(instance==null)
					instance=new SingleDemo();
			}
		return instance;	
	}
}*/
/*由于指令重排优化的存在,导致初始化Singleton和将对象地址赋给instance字段的顺序是不确定的。
在某个线程创建单例对象时,在构造方法被调用之前,就为该对象分配了内存空间并将对象的字段设置为默认值。
此时就可以将分配的内存地址赋值给instance字段了,然而该对象可能还没有初始化。
若紧接着另外一个线程来调用getInstance,取到的就是状态不正确的对象,程序就会出错。
*/
//使用 volatile 关键字保证读之前,对象被初始化
/*public class SingleDemo{
	private static volatile SingleDemo instance=null;
	private SingleDemo(){}
	public static SingleDemo getinstance(){
		if(instance==null)
			synchronized(SingleDemo.class){//这个括号必须加
				if(instance==null)
					instance=new SingleDemo();
			}
		return instance;	
	}
}*/
//静态内部类
public class SingleDemo{
	private static class SingleHolder{
		public static SingleDemo instance = new SingleDemo();
	}
	private SingleDemo(){}
	public static SingleDemo getinstance(){
		return SingleHolder.instance;
	}
}

单例模式的几种实现方式

当一个类只能有一个对象时,往往会用到单例模式,例如,现实生活中有很多临界资源,像 打印机、处理器(单核)、皇帝、太子等等,它们都是稀有资源,只能有一个实例对象。下面用java将单例模式实现:     ...
  • z507263441
  • z507263441
  • 2013-11-10 02:05:14
  • 10505

单例模式的6种实现方式

为什么使用单例模式需要确保某个类只要一个对象,或创建一个类需要消耗的资源过多,如访问IO和数据库操作等,这时就需要考虑使用单例模式了。使用单例模式需要注意的关键点 将构造函数访问修饰符设置为priva...
  • ts1900
  • ts1900
  • 2016-05-13 16:03:16
  • 2015

单例模式的五种实现方式

单例模式可以说是23中设计模式中应用最广的一种模式了。        定义:确保某一个类只有一个实例,自行实例化并且想整个系统提供这个实例。       使用场景:避免某个类产生多个对象而消耗过多...
  • soul_code
  • soul_code
  • 2015-12-05 09:53:06
  • 10235

单例模式两种实现方法,优缺点各是什么?

实现一//单例模式一 public class Test{ private static Test test = new Test(); public Test(){}; public s...
  • yaozhiqi1905658804
  • yaozhiqi1905658804
  • 2017-04-29 14:16:39
  • 622

Singleton单例模式的几种创建方法

创建单例类有以下几种方式: 饿汉式 懒汉式(加同步锁的懒汉式、加双重校验锁的懒汉式、防止指令重排优化的懒汉式) 登记式单例模式 静态内部类单例模式 枚举类型的单例模式 备注: 其中“枚举类型的单例...
  • hl_java
  • hl_java
  • 2017-04-12 22:53:47
  • 483

单例模式的几种用法比较

最近在看何红辉、关爱民著的《Android源码设计模式解析与实战》,一边学习,一边理解,一边记笔记。 1.定义 确保某个类只有一个实例,能自行实例化并向整个系统提供这个实例。 2.应用场...
  • luofen521
  • luofen521
  • 2016-06-30 10:26:38
  • 6419

设计模式——单例模式的几种实现方式

1.饿汉式:静态常量 这种方法非常的简单,因为单例的实例被声明成static和final变量了,在第一次加载类到内存中时就会初始化,所以会创建实例本身是线程安全的。public class Singl...
  • bingogirl
  • bingogirl
  • 2016-09-01 00:03:25
  • 2090

单例模式学习及几种不同写法

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想...
  • yueaini10000
  • yueaini10000
  • 2016-06-24 09:33:23
  • 542

单例模式5种实现方式

在github上看到一个项目,实现了多种设计模式,就把它fork下来,一个一个看,然后也可以学习参考别人写的代码。 地址:https://github.com/iluwatar/java-desig...
  • FoolishAndStupid
  • FoolishAndStupid
  • 2016-04-24 10:13:17
  • 4187

java中实现单例模式的几种方式,简单易懂

一、饿汉式单例类 public class Singleton { private Singleton(){ } private static Singl...
  • yuxin6866
  • yuxin6866
  • 2016-08-14 09:39:19
  • 3000
收藏助手
不良信息举报
您举报文章:单例模式的几种设计方法
举报原因:
原因补充:

(最多只允许输入30个字)