善用设计模式-单例模式

翻译 2014年05月01日 10:52:23

单例模式是设计模式中使用最普遍的模式之一。

单例模式能带来以下两点好处:

1.对于频繁使用的对象,可以省略创建对象所花的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。

2.由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将GC压力,缩短GC停顿时间。

废话不多说,直接贴代码,三种创建方式,以及各自的优缺点


/**
 * @author pengl
 * 2014-5-1
 * 描述:单例模式创建方式一   预创建模式   
 * 预创建模式的缺点:JVM加载单例类时,单例对象会被创建,不管有没用到。
 * 单例模式的好处:a.节省创建对象时间   b.系统内存使用频率降低,减轻GC压力,缩短GC停顿时间
 */
public class SingletonPreLoading {
	private SingletonPreLoading(){
		System.out.println("SingletonPreLoading is created");
	}
	private static SingletonPreLoading singleton = new SingletonPreLoading();
	public static SingletonPreLoading getInstance(){
		return singleton;
	}
	public static void sleep(){
		System.out.println("sleeping...");
	}
}
/**
 * @author pengl
 * 2014-5-1
 * 描述:单例模式创建方式二   懒加载模式
 * 懒加载模式的缺点:多线程下,由于有同步锁,降低了效率
 * 单例模式的好处:a.节省创建对象时间   b.系统内存使用频率降低,减轻GC压力,缩短GC停顿时间
 */
public class SingletonLayLoading {
	private SingletonLayLoading(){
		System.out.println("SingletonLayLoading is created");
	}
	private static SingletonLayLoading singleton = null;
	/**
	 * 为避免多线程导致重复创建对象  加上同步锁
	 * @return
	 */
	public static synchronized SingletonLayLoading getInstance(){
		if(singleton==null){
			singleton = new SingletonLayLoading();
		}
		return singleton;
	}
	public static void sleep(){
		System.out.println("sleeping...");
	}
}
/**
 * @author pengl
 * 2014-5-1
 * 描述:单例模式创建方式三   兼备懒加载和效率
 * 优点1:当SingletonBothLoading类加载时,其内部类并不会被初始化,故可延迟加载
 * 优点2:getInstance()方法被调用时才会加载内部类,实例的建立是在类加载完成时,故天生对多线程友好,不需要使用同步关键字
 * 单例模式的好处:a.节省创建对象时间   b.系统内存使用频率降低,减轻GC压力,缩短GC停顿时间
 */
public class SingletonBothLoading {
	private SingletonBothLoading(){
		System.out.println("SingletonBothLoading is created");
	}
	private static class SingletonHolder{
		private static SingletonBothLoading instance = new SingletonBothLoading();
	}
	public static SingletonBothLoading getInstance(){
		return SingletonHolder.instance;
	}
	public static void sleep(){
		System.out.println("sleeping...");
	}
}
/**
 * 
 * @author pengl
 * 2014-5-1
 * 描述:
 */
public class SingletonTest {
	@Test
	public void testpre(){
		SingletonPreLoading.sleep();
	}
	@Test
	public void testlay(){
		SingletonLayLoading.sleep();
	}
	@Test
	public void testboth(){
		SingletonBothLoading.sleep();
	}
}




C#设计模式——单例模式(Singleton)

一、引言 最近在设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深...
  • ycl295644
  • ycl295644
  • 2015年07月06日 08:53
  • 2002

设计模式之——单例模式(Singleton)的实现、优缺点和常见应用场景

一.单例模式的三种实现 以及各自的优缺点 转载自http://my.oschina.net/suyewanwan/blog/102525 单例模式:单例模式的意思就是只有一个实例。单例模式确保某...
  • qq_30465427
  • qq_30465427
  • 2015年08月09日 15:36
  • 1103

单例模式和工厂模式 简单实例

下面是一个静态的单例模式,类创建时就生成这样一个永久实例。 //饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { //私有的默认构造...
  • asdzheng
  • asdzheng
  • 2013年11月04日 15:26
  • 3188

善用设计模式(一)单例模式

单例模式是设计模式中使用最普遍的一种模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。 使用单例模式有俩大好处: 对于频繁使用的对象,可以省去对象...
  • qq_27428109
  • qq_27428109
  • 2017年03月24日 14:30
  • 106

设计模式学习之单例模式

  • 2013年12月11日 21:43
  • 5KB
  • 下载

23钟设计模式之单例模式

  • 2013年08月13日 10:41
  • 26KB
  • 下载

设计模式之单例模式程序

  • 2010年05月18日 10:28
  • 3KB
  • 下载

java设计模式之单例模式详解

  • 2012年11月02日 17:53
  • 33KB
  • 下载

设计模式单例模式

  • 2014年10月10日 20:56
  • 4KB
  • 下载

设计模式之单例模式(AS3实现)

  • 2012年02月02日 09:48
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:善用设计模式-单例模式
举报原因:
原因补充:

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