1. 单件模式(Singleton Pattern) ---------- 创建型模式
来源:互联网 发布:网络五层协议 编辑:程序博客网 时间:2024/06/01 10:10
1. Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。
2. GOF实现(单线程模式)
public class Singleton
{
private static Singleton instance=null;
private Singleton()
{
}
public static Singleton Instance
{
get
{
if (instance==null)
{
instance = new Singleton();
}
return instance;
}
}
}
潜在的问题: 在单线程下, 此模式可以正确工作. 但是在多线程模式下,如果instance没有初使化,线程A运行完if(instance == null)判断后挂起, 线程B执行此代码判断, 会得到同样的结果去执行构造函数,得到两个实例.
注意此模式下构造函数修饰符是private,所以没有办法通过构造函数来产生实例, 只能通过Instance属性得到.
3. 多线程模式
a. 利用lock锁定
public class Singleton
{
private static Singleton instance=null;
private static readonly object padlock = new object();
private Singleton()
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance==null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
此种模式不错, 但是损失性能.
b. 利用静态构造器
public class Singleton
{
private static readonly Singleton instance=new Singleton();
private static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
其它还有许多实现变种, 如双重校验提高性能啊之内的.
值得一提的是在singleton模式中,一般不要实现序列化, 克隆方法. 否则可以根据此方法生成多个实例, 从而失去singleton模式的宗旨.
设计模式的关键就是隐藏构造函数,使其只能在类的内部被调用, 从而限制实例的生成. 对singleton模式稍加改变, 限制其生成的个数, 就可以改制成对象池. 如最多生成5个数据库连接.
- 1. 单件模式(Singleton Pattern) ---------- 创建型模式
- 单列模式(Singleton Pattern、单态模式、单件模式、对象创建型模式)
- 创建型模式---单件模式(Singleton Pattern)
- 创建型模式 --- 单件模式(Singleton Pattern)
- (第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
- (第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
- (第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
- Singleton单件(创建型模式)
- 创建型模式:Singleton(单件)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 单件模式(Singleton Pattern)
- 工作点滴
- 网上邻居的基础:详解 NETBIOS
- shawl.qiu Javascript 代码高亮类, Highlights/HighlightEngine v1.6
- 正则表达式
- 高质量C++/C编程指南(一)
- 1. 单件模式(Singleton Pattern) ---------- 创建型模式
- 高质量C++/C编程指南(二)
- 随笔
- 在Linux高负载下mysql数据库彻底优化
- 高质量C++/C编程指南(三)
- 谈谈信仰
- 遍历window窗体中控件的方法.
- 高质量C++/C编程指南(四)
- C#类和结构区别的总结(一)