单例模式(3.注册式)

本文介绍了一种使用注册表实现的单例模式,通过继承基类并在注册表中记录实例来确保不同子类间的单例行为。具体展示了如何在基类和子类中实现getInstance方法以获取唯一实例。

package test;

import java.util.HashMap;

public class RegSingleton {

 private static HashMap m_registry = new HashMap();

 static {
  RegSingleton x = new RegSingleton();
  m_registry.put(x.getClass().getName(), x);
 }

 // 注意该构造器不能是私有的,子类构造器需要调用
 public RegSingleton() {
 }

 public static RegSingleton getInstance(String name) {
  if (name == null) {
   name = "test.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));
 }
}

 


package test;

public class RegSingletonChild extends RegSingleton {
 /**
  * 构造器不能为private,父类getInstance方法需要调用该构造器
  */
 public RegSingletonChild() {
 }

 /**
  * 静态工厂方法
  */
 public static RegSingletonChild getInstance() {
  return (RegSingletonChild) RegSingleton.getInstance("test.RegSingletonChild");
 }

 public String toString() {
  return "I am RegSingletonChild's instance.";
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值