用泛型做一个通用的单件模式
2007-07-17 14:25
375 查看
相信大家经常用到单件模式.经常重复的写着部分代码来实现单件.我粘一段可以重用的单件模式供大家参考.与以前的大家经常写的相比,各有优缺点,各位自行取舍.
public class SingletonDome
{
public SingletonDome()
{
}
public static SingletonDome instance
{
get
{
return Singleton<SingletonDome>.Instance;
}
}
}
public class Singleton<T> where T : new()
{
public static T Instance
{
get { return SingletonCreator.instance; }
}
class SingletonCreator
{
internal static readonly T instance = new T();
}
}
先说优点:正如大家所见,只需要调用泛型 Singleton<T>.Instance就可以实现单件模式了.而且可以重用,任何要实现单件的类都是一句话就行了.
缺点:由于在类SingletonCreator 里面要实例化具体的类,导致类的构造函数必需让Singleton<T>可以访问,可能导致调用者直接new一个实例而不使用单件(根据回复.修改了一下,另外线程是安全的)
public class SingletonDome
{
public SingletonDome()
{
}
public static SingletonDome instance
{
get
{
return Singleton<SingletonDome>.Instance;
}
}
}
public class Singleton<T> where T : new()
{
public static T Instance
{
get { return SingletonCreator.instance; }
}
class SingletonCreator
{
internal static readonly T instance = new T();
}
}
先说优点:正如大家所见,只需要调用泛型 Singleton<T>.Instance就可以实现单件模式了.而且可以重用,任何要实现单件的类都是一句话就行了.
缺点:由于在类SingletonCreator 里面要实例化具体的类,导致类的构造函数必需让Singleton<T>可以访问,可能导致调用者直接new一个实例而不使用单件(根据回复.修改了一下,另外线程是安全的)
相关文章推荐
- Web项目中使用NLog记录日志,利用单件模式控制整个项目只有一个Logger对象的问题
- 一个通用的泛型GenericHibernateDao
- 设计模式---单件(C++版) 比较通用的单件模式(STL实现)
- 18.指挥官只有一个——单件模式
- 用迭代子模式,泛型 写一个可以自动扩容的集合类
- 一个通用的泛型GenericHibernateDao
- 看了SAP的笔试题目,顺手写一个单件模式
- 一个通用的泛型 GenericHibernateDao
- 一个泛型的单例模式
- 灵活利用泛型的MVP模式T-MVP(附带一个快速创建MVP接口的Android Studio插件-TMVPHelper)
- 单件模式 嵌套类 泛型
- 一个SpringJDBC的泛型DAO和通用业务层组件
- 一个比较通用的分页控件,完整的设计时支持和比较流行的分页模式(提供源码下载)
- 设计模式---单件(C++版) 一个简单实例(避免用户忘记delete单件实例)
- 使用工厂模式和单件模式构建通用数据库访问类
- 一个单件模式的模板
- 确保类只有一个唯一对象,单件模式
- 利用Android反射与泛型机制写一个通用的Adapter类
- 我写的一个比较通用的分页控件,完整的设计时支持和比较流行的分页模式(提供源码下载)
- 单件模式带来的一个小麻烦