丄諦啲仇魜ヤ
如 果 敌 人 让 你 生 气 , 那 说 明 你 没 有 胜 他 的 把 握!
posts - 6,comments - 56,trackbacks - 1

 

Factory Methord的目的就是在“封装对象的创建”的基础上(simple factory, factory methord, abstract factory的前提都是封装对象的创建),让子类来决定对象被如何创建。对比simple factory 是用一个与之assciation的新造的类来专门决定对象该如何被创建.

仍然是用PizzaStore为例:注意下面的PizzaStore中的createPizza()方法是抽象方法,执行过程有子类来决定!而PizzaStore也因此而是抽象类。



通过NYPizzaStore来创建一个NYCheesePizza的时序图如下:



具体代码如下:
 1package javaapplication18;
 2
 3public class Main
 4{
 5
 6    public static void main(String[] args)
 7    {
 8        PiszzaStore store = new NYPizzaStore();
 9        store.createPizza("CheesePizza");
10        store.orderPizza();
11    }

12}

13

 1package javaapplication18;
 2
 3public abstract class PiszzaStore
 4{
 5
 6    Pizza mPizza;
 7
 8    public PiszzaStore()
 9    {
10    }

11
12    public abstract Pizza createPizza(String pizzaName);
13
14    public Pizza orderPizza()
15    {
16        mPizza.prepare();
17        mPizza.bake();
18        mPizza.cut();
19        mPizza.box();
20        return mPizza;
21    }

22}

23
24

 1package javaapplication18;
 2
 3public class NYPizzaStore extends PiszzaStore
 4{
 5
 6    public NYPizzaStore()
 7    {
 8    }

 9
10    public Pizza createPizza(String pizzaName)
11    {
12        if (pizzaName.equals("CheesePizza"))
13        {
14            mPizza = new NYCheesePizza();
15            System.out.println("NY CheesePizza created.");
16            return mPizza;
17        }

18        else if (pizzaName.equals("ClamPizza"))
19        {
20            mPizza = new NYClamPizza();
21            System.out.println("NY ClamPizza created.");
22            return mPizza;
23        }

24        return null;
25    }

26}

27
28

 1package javaapplication18;
 2
 3public class Pizza
 4{
 5
 6    public Pizza()
 7    {
 8    }

 9
10    public void prepare()
11    {
12        System.out.println("pizza prepared");
13    }

14
15    public void bake()
16    {
17        System.out.println("pizza baked");
18    }

19
20    public void cut()
21    {
22        System.out.println("pizza cut");
23    }

24
25    public void box()
26    {
27        System.out.println("pizza boxed");
28    }

29}

30
31



事实上,所谓的Factory Methord讲白了就是:有些事情,父类故意不干事,让给子类去干。
简化的UML如下:
posted on 2008-05-24 00:41 Crying 阅读(205) 评论(0)  编辑  收藏 所属分类: 模式

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


网站导航: