Jonnas

专注数据库技术

博客园 首页 新随笔 联系 订阅 管理

单线程Singleton模式的几个要点

Singleton模式中的实例构造器可以设置为protected,允许子类的派生;通常是设置为private

Singleton模式一般不要支持ICloneable接口,因为这个可能会导致多个对象实例,与Singleton模式的初衷有所违背;(ICloneable接口通常是用做实例的克隆的,虽然可以做一个浅拷贝,即影子拷贝,实际上也是没有必要的)

Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton模式的初衷有所违背;(构造对象出了天然的构造器方法来构造,还可以通过序列化来构造对象,要在严格的意义上保证一个对象不被滥用,构造对象的时候可以将其序列化到内存流中,然后通过反序列化,从而生成一个新的实例,新的实例的地址同原来的地址是不同的,两个实例属于一个完全的深拷贝)

Singleton模式只考虑到了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,一般没有必要对销毁进行特殊的管理(通过对入口点的限制和延迟加载保持对象的开销最小,而且通常引用的是一个只读的静态字段,一旦初始化以后就相当与垃圾回收中全局的的跟,这就保证了不可能被回收,在类型被卸载的时候才可能被回收,因为对象的开销只有一个,这个开销一般不会很大)

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

Singleton模式扩展

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

将new构造器的调用转移到其他类中,例如多个类协同工作的环境中,某个局部只需要拥有某个类的一个实例

理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的实例构造器的任意调用”

.net Framework中Singleton模式的应用

posted on 2007-03-15 14:41  Jonnas  阅读(729)  评论(0编辑  收藏  举报