设计模式系列1:单体模式(Singleton)
来源:互联网 发布:android互动屏保源码 编辑:程序博客网 时间:2024/06/15 23:47
一、模式定义
保证类仅有一个实例,并提供一个访问它的全局访问点。
二、模式结构图
三、适用场景
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2、当这个唯一实例应该是通过子类化可扩展的,并切客户应该无需更改代码就能使用一个扩展的实例时。
四、模式实现
1、基本的单体模式
Singleton类定义一个GetInstance操作,允许客户访问它的唯一实例。GetInstance是一个静态方法,主要负责创建自己的唯一实例。
/// <summary> /// 单体模式一 /// </summary> public class Singleton { //私有,静态实例 private static Singleton _instance = null; //私有构造函数 private Singleton() { } //静态工厂方法 public static Singleton CreateInstance() { return _instance ?? (_instance = new Singleton()); } }
2、懒加载的单体模式
/// <summary> /// 延迟实例化的单体模式 /// </summary> public class SingletonForLazy { //初始暂不实例化 private static SingletonForLazy _instance = null; //私有的构造子(构造器,构造函数,构造方法) private SingletonForLazy() { } //静态的工厂方法,需要使用时才去创建该单体 public static SingletonForLazy GetInstance() { return _instance ?? (_instance = new SingletonForLazy()); } }
3、线程安全的单体模式
/// <summary> /// 线程安全的单体模式 /// </summary> public class SingletonForThread { /// <summary> /// 单体实例 /// </summary> private static SingletonForThread _instance; /// <summary> /// 线程安全锁 /// </summary> private static object _lock = new object(); /// <summary> /// 构造函数 /// </summary> private SingletonForThread() { } /// <summary> /// 获取流程实例 /// </summary> /// <returns></returns> public static SingletonForThread GetInstance() { //双重锁方式较好地解决了多线程下的单例模式实现 if (null == _instance) { lock (_lock) { if (null == _instance) { _instance = new SingletonForThread(); } } } return _instance; } }
0 0
- 设计模式系列1:单体模式(Singleton)
- 设计模式学习笔记(1)单体模式Singleton
- javascript设计模式-单体singleton模式(2)
- 设计模式之单体详解 Singleton
- 单体模式(Singleton)
- 单体模式 Singleton
- java singleton 单体模式
- 单体模式Singleton
- 单体模式singleton
- 单体模式Singleton
- 设计模式------单体模式
- Web前端开发JavaScript设计模式 -- 单体模式(The Singleton Pattern)
- C#.net Singleton 单体模式
- 单例/单体模式(Singleton)
- 单例/单体模式(Singleton)
- 单例/单体模式(Singleton)
- 单例/单体模式(Singleton)
- 单例/单体模式(Singleton)
- Activity的生命周期
- android 让一个控件按钮居于底部的几种方法
- Arduino 卡片12彩灯调光台
- Geekband STL与泛型编程 第二周笔记 暗影行者
- 感受异或的神奇
- 设计模式系列1:单体模式(Singleton)
- 包和接口
- 第12周 数据结构和算法 线性表-5 栈-压入和弹出运算
- myeclipse 实现框架 spring+springmvc+springsecurity+myibatis+mysql用户认证和人员增删改查
- 如何查询几年的网站历史排名变化
- CSS入门
- 九度OJ 1012 畅通工程 (深度遍历求强连通分量个数)
- 高并发量网站解决方案
- ajax调后台servlet,把返回json用vue做绑定