单例模式

原创 2012年03月22日 09:40:47

什么是单例模式:表示一个类中只有一个实例存在

单例模式使用的好处:可以节省内存,因为它限制了实例的个数,有利于java垃圾回收

实际案例

单例模式的三个重要的特点

1、确保自己只有一个实例 2、单例类必须创建自己的实例 3、单例类必须为其它的对象提供唯一实例

常见单例模式的实现方式:懒汉单例类和饿汉单例类

懒汉单例类:我们可以这样理解,该对象非常懒,只有当外部对象第一次请求实例的时候才去创建实例。它在有需要实例的时候,才去判断自己是否已经创建了实例,如果没有,则自己创建一个实例,然后返回,如果存在则直接返回该实例

java实例代码:以下代码在多线程中可能会出现问题

public class SingtonTest {
	private static SingtonTest sington;
	private SingtonTest(){
		
	}
	public static SingtonTest getSington(){
		if(sington==null){
			sington= new SingtonTest();
		}
		return sington;
	}
	
	public static void main(String[] args) {
		SingtonTest test1=SingtonTest.getSington();
		SingtonTest test2=SingtonTest.getSington();
		System.out.println(test1==test2);
	}
}

饿汉单例类:我们可以这样理解,该单例类非常额,急需要补充食物,所以在类加载的时候就立即创建实例
java实例代码:
public class SingtonTest {
	private static SingtonTest sington=new SingtonTest();
	private SingtonTest(){
		
	}
	public static SingtonTest getSington(){
		return sington;
	}
	
	public static void main(String[] args) {
		SingtonTest test1=SingtonTest.getSington();
		SingtonTest test2=SingtonTest.getSington();
		System.out.println(test1==test2);
	}
}

比较懒汉单例类和饿汉单例类的优缺点



单例模式三个主要的作用

第一:控制资源的使用,通过线程同步来控制资源的并发访问

第二:控制实例产生的数量,达到节约资源的目的

第三:作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

单例案例


使用单例模式核心的一点是体现了面向对象封装性中的单一职责和对象自治的原则,当我们定义的类在很多地方需要new的时候,我们可以将类设置为单例类,把这个生成对象的的活交给类本身。实际上,配置信息类、管理类、控制类、门面类、代理类通常被设计为单例类,java中的struts、spring框架也大量使用了单例类。

Selenium使用单例模式

在项目中使用Selenium进行自动化,非常自然想到用单例对WebDriver进行管理,出于如下考虑:         1)提高成功率。多个实例会使得出现多个浏览器窗口,界面识别会出现问题,影响成功...
  • wanglian2017
  • wanglian2017
  • 2017年06月13日 21:58
  • 359

单例模式的自动析构

总所周知,单例模式如果不主动调用,在进程结束时是不会析构的,而是仅仅把内存释放掉而已 所以,如果希望在析构时进行某些操作,在进程结束前,可以主动调用析构函数,如下面类中的delMe函数(xSingl...
  • mengmingqiang
  • mengmingqiang
  • 2011年08月31日 15:43
  • 2739

Java中用单例模式有什么好处

Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(...
  • huanbia
  • huanbia
  • 2017年05月12日 10:05
  • 2362

单例模式 -通俗易懂的讲解

什么是单例模式: 保证一个类有且仅有一个实例,并提供它的全局访问点。 单例模式有什么用: 其实单例的作用在于避免产生太多实例,也就是不用new那么多次,new一次就占用一次内存的资源,new多了...
  • yangxujia
  • yangxujia
  • 2013年04月10日 01:41
  • 916

一个单例模式的简单例子

ex1: public class Singleton    {        private static final Singleton singleton = null;           p...
  • silence1214
  • silence1214
  • 2009年03月29日 14:56
  • 23501

单例模式的三种常用的形式

自己做下笔记: //单例模式:他的应用场景—如果多个程序要操作一个对象中的数据,那么就要保证只有一个对象。 //饿汉式 publicclassSingle {     privatesta...
  • jiyidehao
  • jiyidehao
  • 2016年02月28日 12:26
  • 486

C#单例模式的几种实现方式

C#单例模式的几种实现方式
  • yanlovehan
  • yanlovehan
  • 2016年11月09日 10:07
  • 2131

单例模式高并发问题

单例模式下,并发量很高,获得对象有两种方式:一种是使用懒汉模式,即系统初始化时初始化对象;第二种是细化锁的粒度,使用读写锁。 第二种方法如下: 单例虽然没有缓存写的那么平凡,如果在getinstanc...
  • gongzi2311
  • gongzi2311
  • 2015年02月10日 17:26
  • 2122

内部类的单例模式

* 上面的单例实现存在小小的缺陷,那么 有没有一种方法,既能够实现延迟加载,又能够  * 实现线程安全呢?  *       还真有高人想到这样的解决方案了,这个解决方案被称为Lazy initial...
  • ygl6150373
  • ygl6150373
  • 2016年11月20日 16:39
  • 860

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

一、饿汉式单例类 public class Singleton { private Singleton(){ } private static Singl...
  • yuxin6866
  • yuxin6866
  • 2016年08月14日 09:39
  • 2654
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单例模式
举报原因:
原因补充:

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