`
lenozhi
  • 浏览: 51035 次
社区版块
存档分类
最新评论

貌似简单的模式-单例模式

 
阅读更多

 翻看设计模式,单例模式往往安排在前面,一般来说,前面的东西都简单,那单例简单吗?

1. 写个singleton很简单,自己拿住自己的对象,整成private的。构造函数private化,再来个static 且同步的方法getInstance,里面初始化。
   看两眼书,都能写个差不多。但请注意,这里有个隐含条件,单例的范围是什么?范围不同,单例的实现与调用是不同的。

  范围:
   单JVM(进程)范围内,一般书上的设计与写法都是针对在一个JVM实例内的单例,也就是说,在这个JVM实例内,这个单例是有效的。
java SingleTon  , 在这个启动范围内,Singleton.getInstance是有效的。再启动一个java SingleTon,就是另一个实例。

   应用上下文范围,比如在spring的context内实现一个singleton,那么这个singleton的有效范围是这个context实例。
   伪码: Context c1 = new Context();    c1.get(”singleton");  范围是c1内
               Context c2 = new Context();    c2.get("singleton"); 范围是c2
  在设计模式中的享元模式,其实就是另一种单例实现。

 
  J2EE容器范围,比如在j2ee容器内定义的JNDI服务。用标准的api去调用,单例有效范围是这个容器的实例。

  网络服务范围,当几台设备做集群或并联成一个应用域时,在域内实现单例,那他的范围就是域,而不是单独的某台设备。
  如果提供对外服务,可能就是采用restful、webservice、http等方式调用。对于调用者而言,往往不关心是否为单例。

 
  这里只例举了一些我认识到的、使用过的单例实现,并不是简单的getInstance就能一招鲜全部搞定。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics