面向对象设计模式1:Singleton模式
从目的来看
创建型(Creational) 模式:负责对象创建
结构型(Structural) 模式:处理类与对象间的组合
行为型(Behavioral) 模式:类与对象交互中的职责分配
从范围来看
类模式处理类与子类的静态关系
对象模式处理对象间的动态关系
动机(Motivation)
在软件系统中,经常有这样一些特殊的类,必须保证它们在系统工程中只存
在一个实例,才能确保它们的逻辑正确性以及良好的效率。
如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
这应该是类设计者的责任,而不是使用者的责任.
意图(Intent)
保证一个类仅有一个实例,并有一个全局访问点
单线程Singleton模式实现:
public calss Singleton
{
private static Singleton instance;
private Singleton(){}
public static Singleton Instance
{
get
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
}
Singleton 模式中的实例构造器可以设置为protected以允许子类派生。
Singleton 模式一般不要支持ICloneable接口,因为这会导致多个对象实例
,与Singleton模式的初衷违背。
Singleton 模式一般不要支持序列化,因为这也可能导致多个对象实例,同
样与Singleton模式的初衷违背。
Singleton只考虑到了对象创建的管理,没有考虑对象销毁的要点。
不能应对多线程环境,在多线程环境下,使用Singleton模式仍然有可能得到
Singleton类的多个实例对象。
多线程Singleton 实现
private static volatile Singleton instance=null;
private object lockHelper=new object();
private Singleton(){}
public static Singleton Instance
{
get
{
if(instance==null)
{
lock(lockHelper)
{
if(instance==null)
{
instance=new Singleton();
}
}
}
return instance;
}
}
多线程Singleton实现2:
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(){}
}
posted on 2011-03-15 22:39 曦's Android 阅读(176) 评论(0) 收藏 举报
浙公网安备 33010602011771号