单例模式在实战种的思考
?
1:单例模式的本质
单例模式的本质:控制实例数目。
?
单例模式是为了控制在运行期间,某些类的实例数目只能有一个。可能有人就会想了,那么我能不能控制
实例数目为2个,3个,或者是任意多个呢?目的都是一样的,节省资源啊,有些时候单个实例不能满足实际的
需要,会忙不过来,根据测算,3个实例刚刚好,也就是说,现在要控制实例数目为3个,怎么办呢?
其实思路很简单,就是利用上面通过Map来缓存实现单例的示例,进行变形,一个Map可以缓存任意多个
实例,新的问题就是,Map中有多个实例,但是客户端调用的时候,到底返回那一个实例呢,也就是实例的调
度问题,我们只是想要来展示设计模式,对于这个调度算法就不去深究了,做个最简单的,循环返回就好了,
示例代码如下:
?
?
t1==cn.javass.dp.singleton.example9.OneExtend@6b97fdt2==cn.javass.dp.singleton.example9.OneExtend@1c78e57t3==cn.javass.dp.singleton.example9.OneExtend@5224eet4==cn.javass.dp.singleton.example9.OneExtend@6b97fdt5==cn.javass.dp.singleton.example9.OneExtend@1c78e57t6==cn.javass.dp.singleton.example9.OneExtend@5224ee
?
?
第一个实例和第四个相同,第二个与第五个相同,第三个与第六个相同,也就是说一共只有三个实例,而
且调度算法是从第一个依次取到第三个,然后回来继续从第一个开始取到第三个。
当然这里我们不去考虑复杂的调度情况,也不去考虑何时应该创建新实例的问题。
注意:这种实现方式同样是线程不安全的,需要处理,这里就不再展开去讲了。
?
?
?
2:何时选用单例模式
建议在如下情况中,选用单例模式:
? 当需要控制一个类的实例只能有一个,而且客户只能从一个全局访问点访问它时,可以选用单例模式,
这些功能恰好是单例模式要解决的问题
?
?
单例模式总结:
很多模式都可以使用单例模式,只要这些模式中的某个类,需要控制实例为一个的时候,就可以很自然的
使用上单例模式。比如抽象工厂方法中的具体工厂类就通常是一个单例。
?
?