《Head First 设计模式》:单件模式
正文
一、定义
单件模式确保一个类只有一个实例,并提供一个全局访问点。
要点:
- 定义持有唯一单件实例的类变量。
- 私有化构造,避免其他类产生实例。
- 对外提供获取单件实例的静态方法。
二、实现步骤
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 设计模式》:单件模式的更多相关文章
- C#设计模式——单件模式
一.为何需要单件模式 需求 我们开发了一个大型的项目,其中存在许多的工具类.但是其中很多的工具类我们并不是经常使用得到,甚至 一次都不会使用.但是这些工具类都是静态的类,会消耗很多的内存,即使一次都不 ...
- NET中的设计模式---单件模式
如众所知,单件模式做为<Gof 23中设计模式>之一,其意图仅允许单件类的一个实例存在(扩展单件模式不在此文范围内),并提供全局的访问方法.UML类图如下. http://csharpin ...
- C#设计模式——单件模式(Singleton Pattern)
一.概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例.这时就需要用到单件模式.二.单件模式单件模式保证一个类仅有一个实例,并提供一个访问它 ...
- 设计模式 - 单件模式(singleton pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...
- 说说设计模式~单件模式(Singleton)
单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...
- .NET设计模式(2):单件模式(Singleton Pattern)
转载:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 单件模式(Singleton Pattern) --.NET设计模式系列之二 ...
- NET设计模式(2):单件模式(Singleton Pattern)[转载]
单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...
- 设计模式(二)单件模式Singleton(创建型)
SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...
- .NET设计模式 第二部分 创建型模式(1)—:单件模式(Singleton Pattern)
单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...
- php设计模式总结-单件模式
一.单件模式 英文叫做sington.其他语言中有叫做单例模式,其实都是一样的道理.保证只会出现单个实例,所以是单例.翻译成单件,永远只会产生一件,呵呵. 还有翻译成单元素模式.其实关键是看这个英文比 ...
随机推荐
- When Lambo with Howdoo
原文链接:https://howdoo.io/when-lambo/ 为了庆祝即将推出的革命性新社交媒体平台Howdoo以及我们令人惊喜的合作伙伴关系和社区,我们正在发起一项竞赛,以最终回答“When ...
- uniapp,微信小程序中使用 MQTT
最近在uniapp打包成微信小程序的项目中第一次用到了MQTT.使用比较简单,但是还是遇到了一些问题.在此记录一下. 官方文档:MQTT Github 官方MQTT测试工具:MQTTX.测试工具使用说 ...
- 数据可视化基础专题(十五):pyecharts 基础(二)flask 框架整合
Flask 前后端分离 Step 1: 新建一个 Flask 项目 $ mkdir pyecharts-flask-demo $ cd pyecharts-flask-demo $ mkdir tem ...
- Flask 基础组件(五):请求和响应
from flask import Flask from flask import request from flask import render_template from flask impor ...
- linux专题(七):账号管理
http://dwz.date/UDf 简介 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账 ...
- unity-Timeline实践
前言 建议入门方式(基本的手册知识了解之后):官方Demo TimelineInputDemo 自定义轨迹 CustomTrack Signal 标记 创建Emitter 和 Receiver 引用: ...
- OSCP Learning Notes - Scanning(1)
TCP vs UDP TCP: Connection-oriented Suited for applications that require high reliablity[HTTP, FTP,T ...
- 帮助你更好的理解Spring循环依赖
网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...
- 食用Win系统自带的PowerShell登录服务器
运行powershell输入ssh root@你的服务器ip -p你的端口 切换rm ~/.ssh/known_hosts cmd 运行 ping 你的ip -t一直ping ctrl+c停止 tra ...
- 【Floyd算法+贪心】 travel 计蒜客 - 45275
题目: 有 n 个景点,从一个景点 i 旅行到另一个景点 j 要花费 Ai,j=Aj,i(n≤100),现在给出由 m(≤1e5) 个景点的组成序列 A,求:在所有 "有子序列 A 的序列中 ...