[笔记]01Singleton 单件(创建型模式)
来源:互联网 发布:瑜伽网络课程 编辑:程序博客网 时间:2024/06/05 02:56
动机(Motivation)
一些特殊的类 只存在一个实例(确保他们的逻辑正确性)
这个应该是类设计者的责任,而不是使用者的责任。
如何绕过常规的构造器?提供一种机制保证一个类只有一个实例?
意图(Intent)
确保一个类只有一个实例。
单线程Singleton模式实现
class Singleton { private static Singleton instance; private Singleton() { } public static Singleton Instance { get { if(instance == null) { instance = new Singleton(); } return instance; } } }
构造器可以设置为protected以允许子类派生
不要支持ICloneable接口
不要支持序列化
缺点是,不能应对多线程的情况
这个模式,我们只考虑了对象的创建而没有考虑对象的销毁
多线程实现
class MulThreadSingleton{ private static volatile MulThreadSingleton instance = null; private static Object lockHelper = new Object(); private MulThreadSingleton() { } public static MulThreadSingleton Instance { get { if(instance == null) { lock(lockHelper) { if(instance == null) { instance = new MulThreadSingleton(); } } } return instance; } }}
使用静态构造器
class StaticSingleton { public static readonly StaticSingleton Instance = new StaticSingleton(); private StaticSingleton() { } }
以上代码等价于
class Singleton { public static readonly Singleton Instance; static Singleton() { Instance = new Singleton(); } private Singleton() { } }
静态构造器能保证,即使在多线程的环境下也只有一个线程访问到静态构造器
这样实现的缺点在于,在构造时没办法接收参数
Singleton模式扩展
这里提出几个关于Singleton模式扩展的几个思路
将一个实例扩展到N个实例
将new构造器的调用转移到其他类中
理解和扩展Singleton模式的核心
如何控制用户使用new对一个类的实例构造器的任意调用
- [笔记]01Singleton 单件(创建型模式)
- [笔记]01Singleton 单件(创建型模式)
- 笔记2:Singleton 单件(创建型模式)
- (创建型模式)Singleton 单件模式
- (创建型模式)Singleton 单件模式
- Singleton单件(创建型模式)
- Singleton单件(创建型模式)
- Singleton 单件(创建型模式)
- 关于Singleton 单件(创建型模式)
- 创建型模式-单件(Singleton)
- Singleton单件(创建型模式)
- Singleton 单件(创建型模式)
- 创建型模式:Singleton(单件)
- 设计模式笔记--创建型模式之五--单件 Singleton
- 设计模式(1)-创建型-单件(Singleton)模式 (个人笔记)
- 设计模式单件(Singleton)---对象创建型模式
- 创建型模式——Singleton 单件模式
- 1. 单件模式(Singleton Pattern) ---------- 创建型模式
- java序列化
- 放slides了,无人值守的性能测试 for 淘宝技术嘉年华TCon2011
- C#中如何将打开的TXT文件读入RichTextBox
- Qt QListView
- 51mina时尚网,整合QQ登陆成功
- [笔记]01Singleton 单件(创建型模式)
- linux中iptables入门教程--设置静态防火墙
- C# winform 运行时panel 如何拖动
- 将多个checkbox控件同时设置成false
- 在Windows下使用VS2005编译WebKit
- C语言的5种存储类以及关键字volatile、restrict
- 二维线段树+标记永久化 poj2155
- SMV源码分析1
- Android中TextView中的字体大小能设置吗?