工厂模式

【工厂模式】 定义了创建对象的接口,由子类决定实例化具体的对象。工厂模式让一个类把实例化的工作延迟到子类进行。

下面是一个具体的例子,用PizzaStore来展示了工厂模式的使用。从类图中我们可以看出,PizzaStore扮演着Creator的角色,Pizza扮演着Product的角色,这两个类都是抽象类。具体的Product定义在Pizza的子类中,由PizzaStore的子类决定如何创建。

[img]http://zzuwxf.iteye.com/upload/attachment/64332/d338afb3-22f1-3500-be35-265fbd26c64a.jpg[/img]

(1) PizzaStore (抽象的Creator,对接口编程,而不对实现编程,非常灵活)

public abstract class PizzaStore {

public Pizza orderPizza(PizzaType type){
Pizza pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza createPizza(PizzaType type);
}

(2) Pizza (抽象的Product)
public abstract class Pizza {
protected String name;
protected String dough;
protected String sauce;

public void prepare(){...}
public void bake(){...}
public void cut(){...}
public void box(){...}
public String getName(){
return name;
}
}

(3) NYStyleCheesePizza (具体的Product)
public class NYStyleCheesePizza extends Pizza{
public NYStyleCheesePizza(){
name = "NY Style Sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinare Sacue";
}
}

(4) NYStylePizzaStore (具体的Factory,根据类型来生成具体的产品)
public class NYStylePizzaStore extends PizzaStore{
public Pizza createPizza(PizzaType type){
if(type.equals(PizzaType.CHEESE)){
return new NYStyleCheesePizza();
}
return null;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值