工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。
主要示例代码:
01 | public abstract class PizzaStore { |
02 | public Pizza orderPizza(String type){ |
03 | Pizza pizza = createPizza(type); |
04 | pizza.prepare(); |
05 | pizza.bake(); |
06 | pizza.cut(); |
07 | pizza.box(); |
08 | return pizza; |
09 | } |
10 | abstract Pizza createPizza(String type); |
11 | } |
12 |
13 |
14 | public abstract class Pizza { |
15 | String name; |
16 | String dough; |
17 | String sauce; |
18 | void prepare(){ |
19 | System.out.println( "prepare pizza" ); |
20 | } |
21 | void bake(){ |
22 | System.out.println( "bake pizza" ); |
23 | } |
24 | void cut(){ |
25 | System.out.println( "cut pizza" ); |
26 | } |
27 | void box(){ |
28 | System.out.println( "box pizza" ); |
29 | } |
30 | } |
31 |
32 |
33 | public class NYStylePizzaStore extends PizzaStore{ |
34 |
35 | public Pizza createPizza(String type) { |
36 | Pizza pizza = null ; |
37 | if (type.equals( "cheese" )){ |
38 | pizza = new NYStyleCheesePizza(); |
39 | } else if (type.equals( "veggie" )){ |
40 | pizza = new NYStyleVeggiePizza(); |
41 | } |
42 | else if (type.equals( "clam" )){ |
43 | pizza = new NYStyleClamPizza(); |
44 | } |
45 | return pizza; |
46 | } |