工厂模式

来源:互联网 发布:kyocera打印机驱动mac 编辑:程序博客网 时间:2024/06/05 04:07

工厂模式:定义了创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推送到子类。

这里写图片描述

下面我们以订披萨为例,通过不同的披萨工厂来生产各种口味的披萨。

1. 工厂基类

public abstract class PizzaFactory {    public Pizza orderPizza(String type){        Pizza pizza = createPizza(type);        pizza.prepare();        pizza.bake();        pizza.box();        return pizza;    }    abstract Pizza createPizza(String type);}

2. 工厂派生类

public class NYStylePizzaFactory extends PizzaFactory{    @Override    Pizza createPizza(String type) {        if("cheese".equals(type)){            return new NYStyleCheesePizza();        }else if("veggie".equals(type)){            return new NYStyleVeggiePizza();        }        return null;    }}public class ChicagoStylePizzaFactory extends PizzaFactory{    @Override    Pizza createPizza(String type) {        if("cheese".equals(type)){            return new ChicagoStyleCheesePizza();        }else if("veggie".equals(type)){            return new ChicagoStyleVeggiePizza();        }               return null;    }}

4. 披萨基类

public class Pizza {    public void prepare(){        System.out.println("prepare...");    }    public void bake(){        System.out.println("bake...");    }    public void box(){        System.out.println("box...");    }}

5. 披萨派生类

public class ChicagoStyleCheesePizza extends Pizza{    public ChicagoStyleCheesePizza() {        System.out.println("Create ChicagoStyleCheesePizza...");    }}public class ChicagoStyleVeggiePizza extends Pizza{    public ChicagoStyleVeggiePizza() {        System.out.println("Create ChicagoStyleVeggiePizza...");    }}public class NYStyleCheesePizza extends Pizza{    public NYStyleCheesePizza(){        System.out.println("Create NYStyleCheesePizza...");    }}public class NYStyleVeggiePizza extends Pizza{    public NYStyleVeggiePizza(){        System.out.println("Create NYStyleVeggiePizza...");    }}

6. 测试

public class FactoryTest {    public static void main(String[] args) {        PizzaFactory nyStylePizzaFactory = new NYStylePizzaFactory();        PizzaFactory chicagoStylePizzaFactory = new ChicagoStylePizzaFactory();        nyStylePizzaFactory.orderPizza("cheese");        System.out.println("---------------------------------");        chicagoStylePizzaFactory.orderPizza("veggie");    }}

7. 运行结果

Create NYStyleCheesePizza...prepare...bake...box...---------------------------------Create ChicagoStyleVeggiePizza...prepare...bake...box...
原创粉丝点击