文档章节

Java设计模式之“单例模式”

素人派
 素人派
发布于 2016/12/31 20:44
字数 466
阅读 3
收藏 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
下一篇: bash快捷键
素人派
粉丝 26
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

转载:原地址http://www.cnblogs.com/zhangchenliang/p/3700820.html 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 结合简单示例和UML图,讲解工厂模式简单原理。 一、引子 话说...

法斗斗
2018/05/08
293
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
296
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
222
0
学了那么多年设计模式依然不会用!那可真蠢!

什么是设计模式? 设计模式(Design Pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决...

GitChat技术杂谈
2018/10/26
0
0
Java程序员从笨鸟到菜鸟之(三十三)大话设计模式(三)单例模式

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

长平狐
2012/11/12
162
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx+tomcat配置https

1、nginx配置https和【proxy_set_header X-Forwarded-Proto $scheme;】 2、java代码: String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServe......

perofu
14分钟前
3
0
必看的Linux系统新手进阶老手心得

不知道从什么时候起,linux这个话题变得越来越普及,成为大家经常讨论的话题。无论在网络上还是实际生活中,竟然很多人都在纠结学习linux的问题。网络上给的答案千千万万,而却还有很多人踌躇...

Linux就该这么学
17分钟前
3
0
Spring Boot 配置元数据指南

1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的。但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot Configuration Proces...

liululee
20分钟前
2
0
foreach查找子类

$list = $menu_model -> menu_list();$parent_list = [];foreach ($list as $v){ if ($v['pid'] == 0) { $parent = $v; foreach ($list as $v1) ......

小小小壮
32分钟前
2
0
基于 HTML5 Canvas 实现的 TP-LINK 电信拓扑设备面板

前言 今天我们以真实的 TP-LINK 设备面板为模型,完成设备面板的搭建,和指示灯的闪烁和图元流动。 先来目睹下最终的实现效果:http://www.hightopo.com/demo/blog_tplink_20170511/index.h...

htdaydayup
38分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部