设计模式之 登记式单例类,最原形的代码,个人感觉对学习很有用,贴上来
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 | } |