设计模式之单例模式

原创 2018年04月17日 20:58:11

单例模式顾名思义,一个类只允许有一个实例,因而只能创建一次,之后访问返回的都是第一次创建的实例。因为不能随意创建,单例类的构造方法都是私有的,只能通过静态方法来获取实例。

单例模式分为饿汉模式和懒汉模式,区别在于创建实例的时机不同:饿汉模式在类初始化的时候创建;懒汉模式在调用获取实例方法时创建。

1. 懒汉模式(Lazy)

public class LazySingleton {
	private static LazySingleton singleton;

	private LazySingleton() {
	}

	public static LazySingleton getInstance() {
		if (singleton == null) {
			singleton = new LazySingleton();
		}
		return singleton;
	}
}

采用懒加载的方式:在需要的时候再创建实例,但上面的实现不是线程安全的,需要采用二重检查来保证线程安全。

public class LazySingleton {
	private static LazySingleton singleton;

	private LazySingleton() {
	}

	public static LazySingleton getInstance() {
		if (singleton == null) {
			synchronized (LazySingleton.class) {
				if (singleton == null) {
					singleton = new LazySingleton();
				}
			}
		}
		return singleton;
	}
}

2. 饿汉模式

public class HungrySingleton {

	private static HungrySingleton singleton = new HungrySingleton();

	private HungrySingleton() {
	}

	public static HungrySingleton getInstance() {
		return singleton;
	}
}

在类初始化的时候创建实例,之后获取到的实例都是第一次所创建的,天然线程安全。缺点在于,无论你是否需要创建实例,都会在类初始化的时候创建。

3. 匿名内部类实现

public class InnerClassSingleton {

	private InnerClassSingleton() {
	}

	private static class InnerClass {
		public static InnerClassSingleton singleton = new InnerClassSingleton();
	}

	public static InnerClassSingleton getInstance() {
		return InnerClass.singleton;
	}

}
在内部类初始化的时候创建实例,与饿汉模式的区别在于可以控制内部类初始化的时机:只有在调用getInstance方法时才会初始化内部类,以达到懒加载的效果。同样,因为是类初始化的时候创建,天然的线程安全。

设计模式之单例模式详解与应用

-
  • 1970年01月01日 08:00

调侃《Head First 设计模式》之单例模式

对于一个类来说,平常我们可以随便new出无限多个对象(只要内存hold得住),但是像线程池、缓存、对话框、日志对象、设备驱动程序的对象只能有一个对象,如果制造多个实例就会出现问题。比如程序行为异常,资...
  • sinat_23092639
  • sinat_23092639
  • 2015-04-25 11:02:27
  • 728

Java设计模式之一 单例设计模式

设计模式: 设计模式的概念首先来源于其它行业:建筑业,在早起建房子的时候,肯定是经验缺乏、显得杂乱无序的,这就会造成很多问题,在行业发展过程,通过不断的经验积累,前辈们针对这些问题提出了合理解决方案...
  • qq_32736689
  • qq_32736689
  • 2016-04-07 08:29:45
  • 2549

设计模式(二)单例模式的七种写法

面试的时候,问到许多年轻的Android开发他所会的设计模式是什么,基本上都会提到单例模式,但是对单例模式也是一知半解,在Android开发中我们经常会运用单例模式,所以我们还是要更了解单例模式才对。...
  • itachi85
  • itachi85
  • 2016-01-17 10:29:15
  • 24999

设计模式:这是最全面 & 详细的 单例模式(Singleton)分析指南

前言 今天我来全面总结一下Android开发中最常用的设计模式 - 单例模式。 关于设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式” 目录 1. 实例引入...
  • carson_ho
  • carson_ho
  • 2016-08-16 17:15:07
  • 4613

研磨设计模式之单例模式.pdf

  • 2011年11月16日 15:06
  • 311KB
  • 下载

GOF 23种设计模式 创建类模式 (1) 单例模式

定义 : 确保一个雷只有一个实例,而且自行实例化并想整个系统提供这个实例 类型 : 创建类模式  类图 :  类图知识点 :  1 类图分为三个部分,依次为 类名 属性...
  • wuming0108
  • wuming0108
  • 2014-08-10 16:26:02
  • 391

java设计模式之单例模式5种方法及优缺点小结

单例设计模式的用处。单例设计模式是指,某个类只有一个实例。在计算机系统中类似于打印机和最常见的就是任务管理器的对话框,不管几个用户同时登录windows 打开的任务对话框只有一个。常见的几种实现方式:...
  • gwbbigbang
  • gwbbigbang
  • 2017-06-04 18:27:09
  • 483

设计模式系列(一)单例模式

一、简单介绍 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。 《设计模式》书中对单例模式动机的介绍 对于系统中的某些类...
  • robertcpp
  • robertcpp
  • 2016-06-05 11:00:42
  • 3622

Android设计模式之单例设计模式的优缺点

转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/50358924单例模式是运用频率很高的模式,但是,由于在客户端通常没有高并发的情...
  • woshizisezise
  • woshizisezise
  • 2015-12-19 17:02:49
  • 1628
收藏助手
不良信息举报
您举报文章:设计模式之单例模式
举报原因:
原因补充:

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