正文

一、定义

单件模式确保一个类只有一个实例,并提供一个全局访问点。

要点:

  • 定义持有唯一单件实例的类变量。
  • 私有化构造,避免其他类产生实例。
  • 对外提供获取单件实例的静态方法。

二、实现步骤

1、创建单件类

(1)方式一:懒汉式

延迟创建单件实例。

线程不安全:

/**
* 单件类(懒汉式、线程不安全)
*/
public class Singleton { /**
* 唯一单件实例
*/
private static Singleton uniqueInstance; /**
* 私有构造
*/
private Singleton() {} /**
* 获取单件实例
*/
public static Singleton getInstance() {
if (uniqueInstance == null) {
// 延迟创建单件实例
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}

线程安全:

/**
* 单件类(懒汉式、线程安全)
*/
public class Singleton { /**
* 唯一单件实例
*/
private static Singleton uniqueInstance; /**
* 私有构造
*/
private Singleton() {} /**
* 获取单件实例(同步方法)
*/
public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
// 延迟创建单件实例
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}

(2)方式二:饿汉式

“急切”创建单件实例。

/**
* 单件类(饿汉式)
*/
public class Singleton { /**
* 唯一单件实例(“急切”创建单件实例)
*/
private static Singleton uniqueInstance = new Singleton(); /**
* 私有构造
*/
private Singleton() {} /**
* 获取单件实例
*/
public static Singleton getInstance() {
return uniqueInstance;
}
}

(3)方式三:双检锁

/**
* 单件类(双重检查加锁)
*/
public class Singleton { /**
* 唯一单件实例
*/
private volatile static Singleton uniqueInstance; /**
* 私有构造
*/
private Singleton() {} /**
* 获取单件实例
*/
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}

2、使用单件类获取唯一单件实例

public class Test {

    public static void main(String[] args) {
// 获取单件实例
Singleton singleton = Singleton.getInstance();
System.out.println(singleton);
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton2);
}
}

《Head First 设计模式》:单件模式的更多相关文章

  1. C#设计模式——单件模式

    一.为何需要单件模式 需求 我们开发了一个大型的项目,其中存在许多的工具类.但是其中很多的工具类我们并不是经常使用得到,甚至 一次都不会使用.但是这些工具类都是静态的类,会消耗很多的内存,即使一次都不 ...

  2. NET中的设计模式---单件模式

    如众所知,单件模式做为<Gof 23中设计模式>之一,其意图仅允许单件类的一个实例存在(扩展单件模式不在此文范围内),并提供全局的访问方法.UML类图如下. http://csharpin ...

  3. C#设计模式——单件模式(Singleton Pattern)

    一.概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例.这时就需要用到单件模式.二.单件模式单件模式保证一个类仅有一个实例,并提供一个访问它 ...

  4. 设计模式 - 单件模式(singleton pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...

  5. 说说设计模式~单件模式(Singleton)

    单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...

  6. .NET设计模式(2):单件模式(Singleton Pattern)

    转载:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 单件模式(Singleton Pattern) --.NET设计模式系列之二 ...

  7. NET设计模式(2):单件模式(Singleton Pattern)[转载]

    单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...

  8. 设计模式(二)单件模式Singleton(创建型)

    SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...

  9. .NET设计模式 第二部分 创建型模式(1)—:单件模式(Singleton Pattern)

    单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...

  10. php设计模式总结-单件模式

    一.单件模式 英文叫做sington.其他语言中有叫做单例模式,其实都是一样的道理.保证只会出现单个实例,所以是单例.翻译成单件,永远只会产生一件,呵呵. 还有翻译成单元素模式.其实关键是看这个英文比 ...

随机推荐

  1. Node Express 4.0 安装

    前言 今天想要用nodejs 写个后台服务,很久之前看过node express 框架,可真当向下手安装的时候,发现好多命令都不记得了.写完后台服务,没事了,总结了下安装过程,记录一下,以便以后查阅方 ...

  2. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  3. Windows平台安装Redmine2.5.x

    安装准备 下载RubyInstaller和Development Kit,也可以使用RailsFTW,轻松搞定windows下的安装. 下载MySql 下载mysql-connector-c-noin ...

  4. iOS获取webview高度

    int webHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scr ...

  5. C语言指针操作

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...

  6. 微信小程序实战(商城)

    github地址(欢迎star):https://github.com/xiaobinwu/dj 版本:0.15.152900(暂未升级原因:升级后需要图片无法本地引用,必须使用image或是远程路径 ...

  7. 一些JQuery使用技巧

    最近做项目,在使用JQuery中遇到一些问题记录下. 1.根据Id查询父级内容,或者父级的父级 之前会使用$("#id").parent().parent(): 这种使用有很大的弊 ...

  8. Git clone出现SSL certificate problem

    1 可以在cmd下,设置 git config --global http.sslVerify false git clone  XXX 即可. 2 TortoiseGit设置 打开TortoiseG ...

  9. C++形参中const char * 与 char * 的区别

    在函数调用时,我们经常看见一个函数的接受参数为(const char *); 例如strlen()函数,它的定义为: size_t strlen( const char *str); 那么将形参设置为 ...

  10. linux 常见基础知识(此文章将会在整个linux学习过程中,不断添加)

    1,linux 文件类型 普通文件 目录文件 链接文件 块设备 字符设备 Socket 管道文件 - d l b c s p 2,linux 文件属性 蓝色 绿色 浅蓝色 红色 灰色 目录 可执行文件 ...