工厂方法 Factory Method

工厂方法 Factory Method
Factory Methord的目的就是在“封装对象的创建”的基础上(simple factory, factory methord, abstract factory的前提都是封装对象的创建), 让子类来决定对象被如何创建。对比simple factory 是用一个与之assciation的新造的类来专门决定对象该如何被创建,具体见前文《简单工厂》。

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



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



具体代码如下:
 1 package  javaapplication18;
 2
 3 public   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

 1 package  javaapplication18;
 2
 3 public   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

 1 package  javaapplication18;
 2
 3 public   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

 1 package  javaapplication18;
 2
 3 public   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如下:

你可能感兴趣的:(工厂方法 Factory Method)