正文

一、定义

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

要点:

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

二、实现步骤

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. 一文梳理Web存储,从cookie,WebStorage到IndexedDB

    前言 HTTP是无状态的协议,网络早期最大的问题之一是如何管理状态.服务器无法知道两个请求是否来自同一个浏览器.cookie应运而生,开始出现在各大网站,然而随着前端应用复杂度的提高,Cookie 也 ...

  2. ES6入门(一)

    目录 ES6入门 (一) let 和 const 命令 let 定义 注意事项 块级作用域 不存在变量提升 let的特点就是存在暂时性死区 特殊情况的暂时性死区 之 ES6函数存在默认值情况 不允许重 ...

  3. day11 本日作业+周末作业

    目录 一.今日作业 1.编写文件copy工具 2.编写登录程序,账号密码来自于文件 3.编写注册程序,账号密码来存入文件 二.周末综合作业: 1.编写用户登录接口 2.编写程序实现用户注册后,可以登录 ...

  4. 数据可视化之powerBI技巧(五)在Power BI中写出优雅的度量值是什么体验?

    之前的文章(采悟:连接表的几个DAX函数,一次全掌握)介绍了产品A的客户与产品B的客户的各种交叉关系,其中最常用的应该是找出A和B的共同客户,以便进行产品关联分析. 之前的思路是计算出两个产品的共同客 ...

  5. 数据可视化之powerBI技巧(四)使用Power BI制作帕累托图

    各种复杂现象的背后,其实都是受关键的少数因素和普通的大多数因素所影响,把主要精力放在关键的少数因素上,就能达到事半功倍的效果. 这就是大家常说的二八原则,也称为帕累托原则,最早是由意大利经济学家 V. ...

  6. 01 flask源码剖析之werkzurg 了解wsgi

    01 werkzurg了解wsgi 目录 01 werkzurg了解wsgi 1. wsgi 2. flask之werkzurg源码流程 3. 总结 1. wsgi django和flask内部都没有 ...

  7. How to use the functions of apply and call

    Although  apply and  call  can implement same function. However, there is a litter different between ...

  8. scrapy shell 遇到的问题

    有时候用scrapy shell来调试很方便,但是有些网站有防爬虫机制,所以使用scrapy shell会返回403,比如下面 有两种解决方法: (1):第一种方法是在命令上加上-s USER_AGE ...

  9. Burp Suite Spider Module - 网络爬虫模块

    Web application spdiering 和scanning 可以结合使用. Burp Suite 的Spider Module - Options 主要包含:Crawler Setting ...

  10. 机器学习作业---K-Means算法

    --------------------------K-Means算法使用-------------------------- 一:数据导入及可视化 import numpy as np import ...