在真正的工厂方法之前,先学习下简单的工厂思想。
假定你是pizza店的老板
现在有一个pizza 类
public abstract class Pizza { public void prepare(){ System.out.println("准备开始做"); } public void bake(){ System.out.println("准备烘焙"); } public void cut(){ System.out.println("开始切"); } }有几种Pizza
public class CheesePizza extends Pizza { CheesePizza (){ this.name="cheese"; }}
public class PepperonPizza extends Pizza{ PepperonPizza(){ this.name="Pepperon"; } } public class DefaultPizza extends Pizza{ public DefaultPizza() { this.name="default"; } }订单
public class OrderPizza { Pizza p; public OrderPizza(String type) { if(type.equals("cheese")){ p=new CheesePizza(); } else if(type.equals("pepperonPizza")){ p=new PepperonPizza(); }else{ p=new DefaultPizza(); } p.prepare(); p.bake(); p.cut(); }}
测试类
public class TestPizza { public static void main(String[] args) { OrderPizza op=new OrderPizza("cheese"); } }准备开始做cheesepizza 准备烘焙 开始切
那么现在的问题是什么呢?
如果加入新的pizza种类的话,不得不修改Order类、 每一次都涉及到修改
也就是if判断这一段
而后面的流程都是没有涉及到改变的。
首先创建一个工厂类
public class SimplePizzaFactory { public Pizza creatPizza(String type){ Pizza p; if(type.equals("cheese")){ p=new CheesePizza(); } else if(type.equals("pepperonPizza")){ p=new PepperonPizza(); }else{ p=new DefaultPizza(); } return p; } }然后修改OrederPizaa
public class OrderPizza { Pizza p; public OrderPizza(String type) { p=new SimplePizzaFactory().creatPizza(type);//change p.prepare(); p.bake(); p.cut(); } }好处:
简单的说,工厂类并不仅仅服务于一个OrderPizza,每一个都可以用这个工厂,不用自己去涉及到修改 每次修改都会成为全局的修改
当然这仅仅是一个简答的工厂模式,还不算是真正的设计模式。