1 package zzuli.acmen.my.factory;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 public class Factory {
7
8 Map<String,Object> map = new HashMap<String,Object>();
9
10 public void setObject(String str){
11
12 //反射机制
13 try {
14 /*
15 * 很关键的几行代码。因为我实现了根据字符串生成Object对象
16 */
17 Class c = Class.forName(str);
18 Object o = c.newInstance();
19 map.put(str, o);
20 } catch (ClassNotFoundException e) {
21 // TODO Auto-generated catch block
22 e.printStackTrace();
23 } catch (InstantiationException e) {
24 // TODO Auto-generated catch block
25 e.printStackTrace();
26 } catch (IllegalAccessException e) {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30
31
32 }
33
34 public Object getObject(String str){
35
36 Object o = map.get(str);
37
38 return o;
39
40 }
41 }
42
43 interface Person{
44
45 public void say(String str);
46
47 }
48
49 class One implements Person{
50
51 public void say(String str) {
52 System.out.println("我是男生"+str);
53
54 }
55
56 }
57
58 class Two implements Person{
59
60 public void say(String str) {
61 System.out.println("我是女生"+str);
62
63 }
64
65 }
1 package zzuli.acmen.my.factory;
2
3 public class Main {
4
5 /**
6 * @param args
7 */
8 public static void main(String[] args) {
9
10 Factory f = new Factory();
11 /*
12 * 自己的工厂类根据一个字符串实现类的子生成;
13 */
14 f.setObject("zzuli.acmen.my.factory.One");
15 f.setObject("zzuli.acmen.my.factory.Two");
16
17 /*
18 * 根据字符串生成相应的Object 对象,并强制转换为相应的对象
19 */
20 Person p = (Person)f.getObject("zzuli.acmen.my.factory.One");
21 p.say("张三");
22 Person pp = (Person)f.getObject("zzuli.acmen.my.factory.Two");
23 pp.say("李四");
24 Person p1 = (Person)f.getObject("zzuli.acmen.my.factory.One");
25 p1.say("王五");
26
27 }
28
29 }
工厂模式之我见,我认为工厂模式是装配把对象的生成从调用的地方解放出来,因此我有了上面的代码!