设计模式之笔记--单例模式(Singleton)
单例模式(Singleton)
定义
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
类图

描述
类Singleton的构造函数的修饰符为private,防止用户使用new创建此类的实例;
定义一个静态的GetInstance方法,负责创建唯一的实例,并允许用户访问它的唯一实例。
应用场景
懒汉模式:第一次调用的时候才产生一个新的实例,并在以后返回此实例。
非线程安全的单例模式
public sealed class Singleton
{
private static Singleton instance; /// <summary>
/// 私有的构造函数
/// </summary>
private Singleton()
{ } public static Singleton GetInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
线程安全的单例模式,需加线程锁
public sealed class Singleton
{
private static Singleton instance;
private static readonly object syncFlag = new object(); /// <summary>
/// 私有的构造函数
/// </summary>
private Singleton()
{ } public static Singleton GetInstance()
{
lock (syncFlag)
{
if (instance == null)
{
instance = new Singleton();
}
}
return instance;
}
}
线程安全的单例模式,双重锁定
public sealed class Singleton
{
private static Singleton instance;
private static readonly object syncFlag = new object(); /// <summary>
/// 私有的构造函数
/// </summary>
private Singleton()
{ } public static Singleton GetInstance()
{
if (instance == null)
{
lock (syncFlag)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
饿汉模式:在程序开始的时候就会产生一个新的实例,并在以后返回此实例。
线程安全的单例模式,静态初始化
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton(); /// <summary>
/// 私有的构造函数
/// </summary>
private Singleton()
{ } public static Singleton GetInstance()
{
return instance;
}
}
设计模式之笔记--单例模式(Singleton)的更多相关文章
- 我的设计模式学习笔记------>单例模式(Singleton)
一.前言 有些时候,允许自由创建某个类的实例是没有意义,还可能造成系统性能下降(因为创建对象所带来的系统开销问题).例如整个Windows系统只有一个窗口管理器,只有一个回收站等.在Java EE应用 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- 【白话设计模式四】单例模式(Singleton)
转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...
- IOS设计模式浅析之单例模式(Singleton)
说在前面 进入正式的设计模式交流之前,扯点闲话.我们在项目开发的过程中,经常会不经意的使用一些常见的设计模式,如单例模式.工厂方法模式.观察者模式等,以前做.NET开发的时候,认真拜读了一下程杰老师的 ...
- 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性
模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...
- 设计模式 笔记 单例模式 Singleton
//---------------------------15/04/09---------------------------- //Singleton 单例模式-----对象创建型模式 /* 1: ...
- C#设计模式学习笔记-单例模式
最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuable Object-Orient ...
- Net设计模式实例之单例模式( Singleton Pattern)
一.单例模式简介(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯 ...
随机推荐
- [洛谷P1452]Beauty Contest
题目大意:给你$n$个点,求出其中最远点的距离 题解:求出凸包,最远点一定都在凸包上,可以对每条边求出最远的点(可以双指针),然后求出和这条边的端点的距离,更新答案 卡点:最开始对每个点求出最远点,但 ...
- BZOJ2752:[HAOI2012]高速公路——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2752 https://www.luogu.org/problemnew/show/P2221#sub ...
- 洛谷 CF1043F Make It One 解题报告
CF1043F Make It One 题意 从一堆数中选择最少的数,使它们的\(\gcd=1\) 输入输出格式 输入格式 第一行:一个正整数\(n\). 第二行:\(n\)个正整数,给出了这个数列. ...
- bzoj2733: [HNOI2012]永无乡(splay+启发式合并/线段树合并)
这题之前写过线段树合并,今天复习Splay的时候想起这题,打算写一次Splay+启发式合并. 好爽!!! 写了长长的代码(其实也不长),只凭着下午的一点记忆(没背板子...),调了好久好久,过了样例, ...
- Codeforces Round #401 (Div. 2) A B C 水 贪心 dp
A. Shell Game time limit per test 0.5 seconds memory limit per test 256 megabytes input standard inp ...
- jdbcType和javaType
MyBatis 通过包含的jdbcType类型 BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED TINYINT REAL VARCHAR BINARY BLOB NV ...
- TCP/UDP HTTP
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只 ...
- 由一篇博文做出的代码,不用Math.round()如何实现其功能
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- [LeetCode] 19. Remove Nth Node From End of List ☆
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- 选择排序Selection sort
顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 再简单点,对着一群数组说,你们谁最小出列,站到最后边 然后继续对剩余的无序数组说 ...