易截截图软件、单文件、免安装、纯绿色、仅160KB

java单例类继承问题 使用登记式单例的发现

由于常见的单例模式,饿汉式单例和懒汉式单例,构造方法都私有了,因此不能被继承.
最近在开发中遇到问题了,恰好需要继承单例类.找资料才找到了这个解决办法---登记式单例.
登记式单例类是为了克服饿汉式单例类及懒汉式单例类均不可继承的缺点而设计的。当单例类需要被继承时适用.
代码清单3:登记式单例类
import java.util.HashMap;
public class RegSingleton
{
static private HashMap m_registry = new HashMap();
private List<Player> plsyers=new linkedList<Player>();
static
{
RegSingleton x = new RegSingleton();
m_registry.put( x.getClass().getName() , x);
}
/**
* 保护的默认构造子
*/
protected RegSingleton() {}
/**
* 静态工厂方法,返还此类惟一的实例
*/
static public RegSingleton getInstance(String name)
{
if (name == null)
{
name = "com.javapatterns.singleton.demos.RegSingleton";
}
if (m_registry.get(name) == null)
{
try
{
m_registry.put( name,
Class.forName(name).newInstance() ) ;
}
catch(Exception e)
{
System.out.println("Error happened.");
}
}
return (RegSingleton) (m_registry.get(name) );
}
public void remove(Player player){
     players.remove(Player);
}
public List<Player> getPlayers(){
   return players;
}
}
它的子类RegSingletonChild 需要父类的帮助才能实例化。下图所示是登记式单例类子类的一个例子。图中的关系表明,此类是由父类将子类实例化的。
下面是子类的源代码。
代码清单4:登记式单例类的子类
import java.util.HashMap;
public class RegSingletonChild extends RegSingleton
{
public RegSingletonChild() {}
/**
* 静态工厂方法
*/
static public RegSingletonChild getInstance()
{
return (RegSingletonChild)
RegSingleton.getInstance(
"com.javapatterns.singleton.demos.RegSingletonChild" );
}
public void test(){
     int a= getPlayers().size();
     int b =RegSingleton .getInstance().getPlayers().size();
}
}
在GoF 原始的例子中,并没有getInstance() 方法,这样得到子类必须调用的getInstance(String name)方法


相关文档:

flex 和 java (web)的组合开发

 1、开发环境:在myeclipse7.0中整合flex plup3.0, 安装flex plup3.0时,选myeclipse 中eclipse的目录,然
      找到flex 的安装好的目录,将plugins和features对应到拷到myeclipse里面 eclipse相应的目录下。
2、创建 flex和 java (Web)的工程(通信框架用blazeds.war):
  &nb ......

Java 中String类的终极总结


一、不变模式:
一个字符串对象创建后它的值不能改变。
String str1="hello";//创建一个对象hello,不会变;
System.out.println(str1);
str1+=" world!";//两个字符串对象粘粘,系统其实创建了一个新的对象,把Str1的指向改了,指向新的对象;hello就          & ......

Effective Java 学习笔记(3)

在实现singleton模式时,我们有以下几种方法。 1. public static final 字段加上private 的构造函数。 public class Singleton{
            public static final Singleton INSTANCE = new Singleton();
       &# ......

一个让98%java程序员犯难的问题的思考

源代码:
public class Parent

    protected  void test() {}
    public Parent()
    {
        this.test();
   }
    public static void main(String[] args)
  &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号