设计模式之登记式单例类

本文介绍了一种登记式单例的设计模式实现,通过使用Java的HashMap来存储单例对象,确保了系统的不同部分可以访问相同的实例。文章提供了完整的代码示例,并展示了如何通过静态工厂方法获取单例对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     设计模式之 登记式单例类,最原形的代码,个人感觉对学习很有用,贴上来

01 import java.util.HashMap;
02 public class RegSingleton
03 {
04 static private HashMap m_registry = new HashMap();
05 static
06 {
07 RegSingleton x = new RegSingleton();
08 m_registry.put( x.getClass().getName() , x);
09 }
10 /**
11 * 保护的默认构造子
12 */
13 protected RegSingleton() {}
14 /**
15 * 静态工厂方法,返还此类惟一的实例
16 */
17 static public RegSingleton getInstance(String name)
18 {
19 if (name == null)
20 {
21 name = "com.javapatterns.singleton.demos.RegSingleton";
22 }
23 if (m_registry.get(name) == null)
24 {
25    try
26 {
27 m_registry.put( name,
28 Class.forName(name).newInstance() ) ;
29 }
30 catch(Exception e)
31 {
32 System.out.println("Error happened.");
33 }
34 }
35 return (RegSingleton) (m_registry.get(name) );
36 }
37 /**
38 * 一个示意性的商业方法
39 */
40 public String about()
41 {
42 return "Hello, I am RegSingleton.";
43 }
44 }
45 /***
46 它的子类RegSingletonChild 需要父类的帮助才能实例化。请看下面的相关代码:
47 **/
48  
49 import java.util.HashMap;
50 public class RegSingletonChild extends RegSingleton
51 {
52 public RegSingletonChild() {}
53 /**
54 * 静态工厂方法
55 */
56 static public RegSingletonChild getInstance()
57 {
58 return (RegSingletonChild)
59 RegSingleton.getInstance(
60 "com.javapatterns.singleton.demos.RegSingletonChild" );
61 }
62 /**
63 * 一个示意性的商业方法
64 */
65 public String about()
66 {
67 return "Hello, I am RegSingletonChild.";
68 }
69 }
70  
71 /*********************************一个子类实现的范例**************************/
72 import java.util.HashMap; //使用了哈希映射的相关方法
73 public class RegSingletonChild extends RegSingleton {
74 public RegSingletonChild() {}
75 /** * 静态工厂方法 */
76 static public RegSingletonChild getInstance() {
77 return (RegSingletonChild)
78 RegSingleton.getInstance( "com.javapatterns.singleton.demos.RegSingletonChild" );
79 }
80 /** * 一个示意性的商业方法 */
81 public String about() {
82 return "Hello, I am RegSingletonChild.";
83 }
84 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值