设计模式(三)——简单工厂模式

    技术2022-07-12  89

    一、基本介绍
    简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品的实例。简单工厂模式是工厂模式家族中最简单实用的模式。简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)。在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。
    二、 应用
    需求:一个披萨项目,要便于披萨种类的扩展,要便于维护。 1)披萨的种类很多(比如GreekPizz、CheesePizz等等) 2)披萨的制作有prepare、bake、cut、box 3)完成披萨店订购功能类图 代码 1)pizza抽象类 public abstract class Pizza { protected String name; //名字 //准备原材料,不同的披萨不一样,因此,我们做成抽象方法 public abstract void prepare(); public void back(){ System.out.println(name + "backing"); } public void cut(){ System.out.println(name + "cut"); } public void box(){ System.out.println(name + "boxing"); } public void setName(String name){ this.name = name; } }

    2)具体披萨类,继承抽象披萨类

    public class CheesePizza extends Pizza{ public void prepare() { System.out.println("给制作奶酪披萨准备原材料"); } } public class GreekPizza extends Pizza{ public void prepare() { System.out.println("给希腊披萨准备原材料"); } } public class PepperPizza extends Pizza{ public void prepare() { System.out.println("给胡椒披萨准备原材料"); } }

    3)披萨工厂类

    public class SimpleFactory { public Pizza createPizza(String orderType){ Pizza pizza = null; System.out.println("使用简单工厂模式"); if(orderType.equals("greek")){ pizza = new GreekPizza(); pizza.setName("希腊披萨"); }else if(orderType.equals("cheese")){ pizza = new CheesePizza(); pizza.setName("奶酪披萨"); }else if(orderType.equals("pepper")){ pizza = new PepperPizza(); pizza.setName("胡椒披萨"); } return pizza; } }

    4)披萨订单类

    public class OrderPizza { //定义一个简单工厂对象 public OrderPizza(SimpleFactory simpleFactory){ setFactory(simpleFactory); } //定义一个简单工厂对象 SimpleFactory simpleFactory; Pizza pizza = null; public void setFactory(SimpleFactory simpleFactory){ String orderType = "";//用户输入的 this.simpleFactory = simpleFactory; do{ orderType = getType(); pizza = this.simpleFactory.createPizza(orderType); //输出pizza if(pizza != null){ pizza.prepare(); pizza.back(); pizza.cut(); pizza.box(); }else{ System.out.println("订购披萨失败"); break; } }while(true); } //写一个方法,可以获取客户希望订购的披萨种类 private String getType(){ try{ BufferedReader strin = new BufferedReader(new InputStreamReader(System.in)); System.out.println("input pizza type:"); String str = strin.readLine(); return str; }catch (IOException e){ e.printStackTrace(); return ""; } } }

    5)店铺类

    //相单于一个客户端,发出订购 public class PizzaStore { public static void main(String[] args) { //new OrderPizza(); //使用简单工厂模式 new OrderPizza(new SimpleFactory()); System.out.println("退出程序"); } }
    Processed: 0.012, SQL: 9