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
}