工厂模式之简单工厂模式,head first设计模式
简单设计模式比较简单,15分钟的时间,跟着我做,十几分钟学会简单设计模式,开始吧:
1.使用new实例化一个对象时,你肯定知道这种代码缺少弹性,绑定着具体的类会导致代码更加脆弱,简单工厂模式就是针对接口编程,巧妙的设计解决这个问题。
Pizza pizza =new CheesePizza();
2,直接上一个简单工厂模式代码,然后分析。你可以拷贝自己建立以下四个类
Pizza类:披萨类
package com.example.demo.factory; import java.util.ArrayList; public abstract class Pizza { /** * 名称 */ String name; /** * 面团类型 */ String dough; /** * 酱料 */ String sauce; /** * 作料 */ ArrayList<String> toppings = new ArrayList<String>(); void prepare() { System.out.println("准备 " + name); System.out.println("揉面团..."); System.out.println("添加酱料..."); System.out.println("添加作料: "); for (int i = 0; i < toppings.size(); i++) { System.out.println(" " + toppings.get(i)); } } void bake() { System.out.println("烘烤25分钟"); } void cut() { System.out.println("把Pizza对角切片"); } void box() { System.out.println("把Pizza装盒子"); } public String getName() { return name; } }
简单披萨工厂类:SimplePizzaFactory,根据需求创建不同的披萨
package com.example.demo.factory; import org.apache.commons.codec.binary.StringUtils; public class SimplePizzaFactory { public Pizza createPizza(String type) { Pizza pizza = null; if (StringUtils.equals(type,"cheese")) { pizza = new CheesePizza(); } else if (StringUtils.equals(type,"veggie")) { pizza = new VeggiePizza(); } return pizza; } }
披萨店类:PizzaStore,生成披萨
package com.example.demo.factory; public class PizzaStore { private final SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }
main启动类:
package com.example.demo; import com.example.demo.factory.Pizza; import com.example.demo.factory.PizzaStore; import com.example.demo.factory.SimplePizzaFactory; public class PizzaApplication { public static void main(String[] args) { SimplePizzaFactory factory = new SimplePizzaFactory(); PizzaStore store = new PizzaStore(factory); Pizza pizza = store.orderPizza("cheese"); System.out.println("We ordered a " + pizza.getName() + "\n"); pizza = store.orderPizza("veggie"); System.out.println("We ordered a " + pizza.getName() + "\n"); } }
将这四个类考入到你的eclipse或者idea运行,恐怕不要过多解释你就能看懂其中的巧妙之处,其实简单工厂不是一个设计模式,反而更像一种编程习惯;
运行结果:
好了到这我想你拷贝代码大概用了5分钟,接下来十分钟自己分析调用逻辑流程比较好,别人说永远说不清楚,逻辑较为简单,梳理一下就好了,就不详细讲解,相信你可以做到的,在这仅提供一份资源和信念;
代码是我自己运行没问题拷贝过来的,如有问题没法运行或者需要详细讲解的请留言,定当回复一起探讨!谢谢!