单例设计模式Singleton 和多例模式
来源:互联网 发布:phoneshop软件 编辑:程序博客网 时间:2024/05/19 05:05
单列设计模式的特点:
单例类只能有一个实例。
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。
一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承。
单列设计模式的示例代码:
public class Singleton
{
private static Singleton m_instance = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if(m_instance==null)
{
m_instance=new Singleton();
}
return m_instance;
}
}
多列设计模式:
所谓多例模式,实际上就是单例模式的自然推广,单例类一般情况下只可以有一个实例,但单例类也可以推广到允许有限个实例,这种模式就是多例模式。作为对象的创建模式,多例模式有以下特点:
多例类可以有多个实例。
多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
多例类分为有上限多例类与无上限多例类。
一个有上限的多例类已经把实例的上限当作逻辑的一部分,并建造到了多例类的内部。如下
多列设计模式类图;
多列设计模式的实例:
public class Multiton
{
private static Multiton instance1=null;
private static Multiton instance2=null;
private Multiton()
{
}
public static Multiton getInstance(int whichOne)
{
if(whichOne==1)
{
if(instance1==null)
{
instance1=new Multiton ();
}
return instance1;
}
else
{
if(instance2==null)
{
instance2=new Multiton ();
}
return instance2;
}
}
}
(2)多线程Singleton实现:
2 {
3 private static volatile MultiThread_Singleton instance = null;
4 private static object lockHelper = new object();
5 private MultiThread_Singleton() { }
6 public static MultiThread_Singleton Instance
7 {
8 get
9 {
10 if (instance == null)
11 {
12 lock (lockHelper)
13 {
14 if (instance == null)
15 {
16 instance = new MultiThread_Singleton();
17 }
18 }
19 }
20 return instance;
21 }
22 }
23
此程序对多线程是安全的,使用了一个辅助对象lockHelper,保证只有一个线程创建实例(如果instance为空,保证只有一个线程instance = new MultiThread_Singleton();创建唯一的一个实例)。(Double Check)
请注意一个关键字volatile,如果去掉这个关键字,还是有可能发生线程不是安全的。
volatile 保证严格意义的多线程编译器在代码编译时对指令不进行微调。
(3)静态Singleton实现
3 class Static_Singleton
4 {
5 public static readonly Static_Singleton instance = new Static_Singleton();
6 private Static_Singleton() { }
7 }
以上代码展开等同于
2 {
3 public static readonly Static_Singleton instance;
4 static Static_Singleton()
5 {
6 instance = new Static_Singleton();
7 }
8 private Static_Singleton() { }
9 }
- 单例设计模式Singleton 和多例模式
- 单例设计模式(Singleton)
- 单例设计模式Singleton
- singleton(单例设计模式)
- 单例设计模式(Singleton)
- Singleton 单例设计模式
- 单例设计模式Singleton
- Singleton 单例设计模式
- Singleton单例设计模式
- 单例(Singleton)设计模式
- 设计模式-Singleton单例
- 单例(Singleton)设计模式
- 设计模式(2)-单例模式(Singleton)
- 设计模式 - Singleton Pattern(单例模式)
- 设计模式 - Singleton Pattern(单例模式)
- 设计模式---单例模式(singleton)
- 设计模式(4)-单例模式(Singleton)
- 设计模式 – 单例模式(Singleton)
- strcpy, memcpy和memmove的区别
- Linux网络服务器管理教程
- MonoRail 学习笔记十二:layout布局的使用
- Cisco 3550 配置不同 vlan DHCP
- Red Hat EnterpriseLinux服务器配置与应用实战指南
- 单例设计模式Singleton 和多例模式
- 23种设计模式
- 设置文本框CTRL+a全选
- CSDN的博客只发技术文章,开通新浪投资博客
- 32位数字乘积算法实现(不能使用64位整形)
- 使用STS开发Grails应用
- Unix5中IO模型的图解分析和比较。
- 2010年全国各地高考0分作文欣赏!爆笑!
- Winform 下的地图开发控件(GMap.NET)使用心得