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

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

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就能一招鲜全部搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值