文档章节

Java设计模式之“单例”

素人派
 素人派
发布于 2015/07/22 07:55
字数 464
阅读 9
收藏 0
  • 介绍
单例模式是相对比较常见的一种设计模式。其本质就是使一个类对象,在同一个JVM中只有一个实例。这种设计模式经常会和工厂模式配合使用。
  • 示例
下面是一个没有考虑线程安全的例子
[codesyntax lang="java" lines="normal"]
package org.suren.pattern;


/**
 * @author suren
 * @date 2015-4-1
 *
 * 一个最简单、直接的单例实现例子。
 * 没有考虑线程安全问题,所以在运行3到5次就能看到打印出来的对象不止一个。
 *
 * http://surenpi.com
 */
public class SingleTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int count = 10;

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
				}
			}.start();
		}

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
				}
			}.start();
		}
	}
}

/**
 * @author suren
 * @date 2015-4-1
 *
 * http://surenpi.com
 */
class Single
{
	private static Single single = null;

	//私有化默认构造器,这样就保证了无法从类的外部调用构造方法
	private Single(){}

	/**
	 * 提供静态方法获取实例对象
	 * @return
	 */
	public static Single getInstance()
	{
		if(single == null)
		{
			single = new Single();
		}

		return single;
	}
}
[/codesyntax]
下面是线程安全的例子
[codesyntax lang="java" lines="normal"]
package org.suren.pattern.safe1;


/**
 * @author suren
 * @date 2015-4-1
 *
 * 一个最简单、直接的单例实现例子。
 * 没有考虑线程安全问题,所以在运行3到5次就能看到打印出来的对象不止一个。
 *
 * http://surenpi.com
 */
public class SafeSingleTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int count = 5000;
		final long begin = System.currentTimeMillis();

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
					System.out.println(System.currentTimeMillis() - begin);
				}
			}.start();
		}

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
					System.out.println(System.currentTimeMillis() - begin);
				}
			}.start();
		}
	}
}

/**
 * @author suren
 * @date 2015-4-1
 *
 * http://surenpi.com
 */
class Single
{
	private static Single single = null;

	//私有化默认构造器,这样就保证了无法从类的外部调用构造方法
	private Single(){}

	/**
	 * 提供静态方法获取实例对象
	 * @return
	 */
	public static synchronized Single getInstance()
	{
		if(single == null)
		{
			single = new Single();
		}

		return single;
	}
}
[/codesyntax]
  • 参考

本文转载自:http://surenpi.com/2015/04/01/java%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8b%e5%8d%95%e4%be%8b/

共有 人打赏支持
上一篇: JNLP
下一篇: JQuery zTree 的使用
素人派
粉丝 26
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问
Java程序员从笨鸟到菜鸟之(三十三)大话设计模式(三)单例模式

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说...

长平狐
2012/11/12
120
0
为什么java中用枚举实现单例模式会更好

枚举单例是java中使用枚举提供一个实例对象来实现单例模式的一种新方法,虽然单例模式在java中早已存在,但枚举单例实际上从java5引入枚举作为它的关键特性之后相对来说还是一个新的概念,这...

zhoujy
2013/06/01
0
0
23种设计模式(1):单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名、属性、方法 2.以<<开头和以>>结尾的为注释...

LCZ777
2014/07/05
0
0
为什么我墙裂建议大家使用枚举来实现单例。

关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的...

2018/06/10
0
0
从 Java 到 Scala (三): object 的应用

本文由 Captain 发表在 ScalaCool 团队博客。 在上篇 Java 到 Scala 系列中,我想你或多或少在语言特性上对有了一定的掌握,在了解完它酷酷的语言特性——让静态回归常态并能简单运用其衍生出...

ScalaCool
2018/09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开源 java CMS - FreeCMS2.8 自定义标签 sitePath

项目地址:http://www.freeteam.cn/ sitePath 从FreeCMS 2.4开始支持 按上下级顺序提取指定站点的所属站点。 参数 说明 id 站点id sourcepath 站点源文件目录名 返回值 说明 site 站点对象,...

freeteam
31分钟前
1
0
2019 年最好的 7 款虚拟私人网络服务

糟糕的数据安全会带来极大的代价,特别是对企业而言。它会大致大规模的破坏并影响你的品牌声誉。尽管有些企业可以艰难地收拾残局,但仍有一些企业无法从事故中完全恢复。不过现在,你很幸运地...

linuxCool
今天
6
0
OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
今天
629
16
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
7
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部