鱼跃于渊

First know how, Second know why !
posts - 0, comments - 1, trackbacks - 0, articles - 49

工厂模式

Posted on 2008-12-20 19:29 鱼跃于渊 阅读(172) 评论(0)  编辑  收藏 所属分类: 设计模式
工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简单工厂模式。

下面看例子代码:
此模式涉及到抽象工厂角色(汽车厂),具体工厂角色(具体的汽车车间),抽象产品角色(汽车)以及具体产品角色(私车,公交巴士)。
 1package com.givetop.Factory;
 2
 3
 4
 5public class Factory1 {
 6    public static void main(String[] args){
 7        Car_Factory cf = new Car_Factory();
 8        Car car = cf.getCar("Benz");
 9        car.run();
10        car.stop();
11        System.out.println("------------------------------------------------------------------------");
12        Bus_Factory bf = new Bus_Factory();
13        bf.getCar("Big_Bus").run();
14        bf.getCar("Big_Bus").stop();
15        System.out.println("------------------------------------------------------------------------");
16        bf.getCar("Ford").run();
17        bf.getCar("Ford").stop();
18    }

19}

20
21interface Car{
22    public void run();
23    public void stop();
24}

25
26interface Factory{
27    
28}

29
30class Car_Factory implements Factory{
31    public Car getCar(String type){
32        Car c = null ;
33        try {
34            c = (Car)Class.forName("com.givetop.Factory."+type).newInstance();
35        }
 catch (InstantiationException e) {
36            e.printStackTrace();
37        }
 catch (IllegalAccessException e) {
38            e.printStackTrace();
39        }
 catch (ClassNotFoundException e) {
40            e.printStackTrace();
41        }

42        return c;
43    }

44}

45
46class Bus_Factory implements Factory{
47    public Car getCar(String type){
48        Car c = null ;
49        try {
50            c = (Car)Class.forName("com.givetop.Factory."+type).newInstance();
51        }
 catch (InstantiationException e) {
52            e.printStackTrace();
53        }
 catch (IllegalAccessException e) {
54            e.printStackTrace();
55        }
 catch (ClassNotFoundException e) {
56            e.printStackTrace();
57        }

58        return c;
59    }

60}

61
62class Ford implements Car{
63    public void run(){
64        System.out.println("Ford开始启动了!");
65    }

66    public void stop(){
67        System.out.println("Ford停止了!");
68    }

69}

70
71class Benz implements Car{
72    public void run(){
73        System.out.println("Benz开始启动了!");
74    }

75    public void stop(){
76        System.out.println("Benz停止了!");
77    }

78}

79
80class Big_Bus implements Car{
81    public void run(){
82        System.out.println("Big_Bus开始启动了!");
83    }

84    public void stop(){
85        System.out.println("Big_Bus停止了!");
86    }

87}

88
89class Mini_Bus implements Car{
90    public void run(){
91        System.out.println("Mini_Bus开始启动了!");
92    }

93    public void stop(){
94        System.out.println("Mini_Bus停止了!");
95    }

96}

不过我有点纳闷, Bus_Factory也能制造小汽车   , 可见这个还设计的不太完善,我想应该在Car 这个接口里应该分别有小汽车和Bus 的抽象类或接口才对!

只有注册用户登录后才能发表评论。


网站导航: