设计模式之笔记--单例模式(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封装它的唯 ...
随机推荐
- Go语言【第五篇】:Go条件语句
Go语言条件 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句.下图展示了程序语言中条件语句的结构: Go语言提 ...
- AOP拦截+权限验证+返回默认接口对象
接口如:public IList<string> TestAOP(string token); public IMethodReturn Invoke(IMethodInvocation ...
- 【刷题】UOJ #171 【WC2016】挑战NPC
小 N 最近在研究 NP 完全问题,小 O 看小 N 研究得热火朝天,便给他出了一道这样的题目: 有 \(n\) 个球,用整数 \(1\) 到 \(n\) 编号.还有 \(m\) 个筐子,用整数 \( ...
- [洛谷P3550][POI2013]TAK-Taxis
题目大意:一条路上有三个点,$0$为起始位置,$d$为总部,$m$为家.有$n$辆车,每辆车最多行驶$x_i$,都从$d$出发,可以在任意位置结束,问最少几辆车可以到家. 题解:贪心,发现当人在$[0 ...
- BZOJ1149:[CTSC/APIO2007]风铃——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1149 https://www.luogu.org/problemnew/show/P3621 sb ...
- LOJ2587:[APIO2018]铁人两项——题解
https://loj.ac/problem/2587#submit_code (题面来自LOJ) 考试时候发觉树很可做,并且写了一个dp骗到了树的分. 苦于不会圆方树……现在回来发现这题还是很可做的 ...
- 斜率优化第一题! HDU3507 | 单调队列优化DP
放一手原题 题解: 第一次写(抄)斜率优化,心里还是有点小激动的.讲一下怎么实现的! 首先我们可以考虑一个朴素的dp:DP[i]表示前i个数字的最少花费,显然我们有一个转移方程 DP[i]=min{D ...
- ES6箭头函数总结
1. 箭头函数基本形式 let func = (num) => num; let func = () => num; let sum = (num1,num2) => num1 + ...
- bzoj2431: [HAOI2009]逆序对数列(DP)
f[i][j]前i个数有j个逆序对的数量 f[i][j]=sigma(f[i-1][j-k]){1<=k<=i} 维护一个前缀和即可 #include<iostream> #i ...
- 【树状数组】【P2345】 奶牛集会
传送门 Description 约翰的\(N\)头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在 ...