翻看设计模式,单例模式往往安排在前面,一般来说,前面的东西都简单,那单例简单吗?
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就能一招鲜全部搞定。
貌似简单的模式-单例模式
最新推荐文章于 2022-03-02 18:00:59 发布