Java情势筹划之单例情势(四)[Java编程]
本文“Java情势筹划之单例情势(四)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
不完好的单例类
什么是不完好的单例类
预计有些读者见过下面这样的“不完好”的单例类.
代码清单10:“不完好”单例类
package com.javapatterns.singleton.demos;
public class LazySingleton
{
private static LazySingleton
m_instance = null;
/**
* 公开的构造子,外界可以直接实例化
*/
public LazySingleton() { }
/**
* 静态工厂办法
* @return 返还LazySingleton 类的惟一实例
*/
synchronized public static
LazySingleton getInstance()
{
if (m_instance == null)
{
m_instance = new LazySingleton();
}
return m_instance;
}
}
上面的代码乍看起来是一个“懒汉”式单例类,细心一看,发现有一个公开的构造子.由于外界可以利用构造子成立出肆意多个此类的实例,这违反了单例类只能有一个(或有限个)实例的特点,因此这个类不是完好的单例类.这种情形有时会呈现,比方javax.swing.TimerQueue 就是一例,关于这个类,请拜见《Java与情势》一书中的“察看者情势与Swing 按时器” 一章.
造成这种情形呈现的缘由有以下几种大概:
(1) 初学者的错误.很多初学者没有熟习到单例类的构造子不能是公开的,因此犯下这个错误.有些初学Java 语言的学员乃至不知道一个Java 类的构造子可以不是公开的.在 这种情形下,计划师大概会通过自我约束,也就是说不去调用构造子的办法,将这个不完好的单例类在利用中作为一个单例类利用.
在这种情形下,一个简单的改正办法,就是将公开的构造子改成私有的构造子.
(2) 当初出于考虑不周,将一个类计划成为单例类,后来发现此类该当有多于一个的实例.为了补偿错误, 干脆将构造子改成公开的,以便在需求多于一个的实例时, 可以随时调用构造子成立新的实例.要改正这种情形较为艰难,必须按照具体情形做出改良的决意.假如一个类在最初被计划成为单例类,但后来发现实际上此类该当有有限多个实例,这时刻该当考虑能否将单例类改成多例类(Multiton).
(3)计划师的Java 知识很好,并且也知道单例情势的精确利用办法,但是还是有意利用这种不完好的单例情势,因为他意在利用一种“改良”的单例情势.这时刻, 除去共有的构造子不符合单例情势的要求之外,这个类必须是很好的单例情势.
以上是“Java情势筹划之单例情势(四)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |