c#平台下singleton单件模式

模式分类:

从目的来看:

-创建型模式:负责对象创建

-结构型模式:处理类与对象之间的组合关系

-行为型模式:类与对象交互中的职责分配


从范围来看:

-类模式处理类与子类的静态关系

-对象模式处理对象间的动态关系


单例模式的意图就是保证一个类只有一个实例,并提供一个该实例的全局访问点。


public class Singleton

{

private static Single instance;

private Singleton(){}

public static Singleton Instance

{

get

{

if (instance == null) instance = new Singleton();

return instance;

}

}

}


class Test

{

public static void Main(){

Singleton t1 = Singleton.Instance;

Singleton t2 = Singleton.Instance;

Console.WriteLine(Object.ReferenceEquals(t1, t2) == true);

}

}


==============================

singleton模式中的实例构造器可以设置为protected以允许子类派生。

singleton模式一般不要支持ICloneable接口,因为这会导致多个对象实例,与singleton模式的初衷违背。

singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton模式的初衷违背

singleton模式只考虑到对象创建的管理,没有考对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊处理。

不能应对多线程环境:在多线程环境下,使用singleton模式仍然有可能得到singleton类的多个实例对象


多线程下:

class Singleton

{

private static volatile Singleton install = null;

private static object lockHelper = new Object();


private Singleton(){}

public static Singleton Instance

{

get{

lock (lockHelper)

{

if (instance == null)

{

instance = new Singleton();

}

}

}

}

}


======

当然还有一种简洁方式可以保证多线程环境下的单例模式,就是利用静态构造器

在多线程模式下,静态构造器只被创建一次

class Singleton{

public static readonly Singleton Instance = new Singleton();

private Singleton(){}

}


其实这段代码等价于:

class Singleton{

public static readonly Singleton Instance;

//多线程环境下只能有一个线程执行它,也就是说免费加锁

static Singleton(){

Instance = new Singleton();

}

private Singleton(){}

}


=========

singleton模式扩展:

*将一个实例扩展到n个实例,例如对象池的实现

*将new构造器的调用移到其他类中

*核心就是如何控制用户使用new对一个类的实例构造器的任意调用





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值