设计模式学习之——简单工厂

    xiaoxiao2024-11-30  3

    在真正的工厂方法之前,先学习下简单的工厂思想。

    假定你是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,每一个都可以用这个工厂,不用自己去涉及到修改 每次修改都会成为全局的修改

    当然这仅仅是一个简答的工厂模式,还不算是真正的设计模式。

    转载请注明原文地址: https://ju.6miu.com/read-1294127.html
    最新回复(0)