工厂模式

♀尐吖头ヾ 提交于 2020-01-17 00:16:01

概述

工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

实例

例举披萨店的例子,一个披萨店卖三种披萨,奶酪披萨、希腊披萨,胡椒披萨,他们分别继承自pizza类。

pizza类

public abstract class Pizza {
    private String name;//名字
    //准备原材料,不同的披萨不一样,因此,我们做成抽象方法
    public abstract void prepare();
    public void bake(){
        System.out.println(name+"baking");
    }
    public void cut(){
        System.out.println(name+"cutting");
    }
    //打包
    public void box(){
        System.out.println(name+"boxing");
    }

    public void setName(String name) {
        this.name = name;
    }
}

奶酪披萨类

继承自Pizza类实现其prepare() 方法,胡椒披萨、希腊披萨同理。

public class CheesePizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("为奶酪披萨准备材料");
    }
}

工厂类方法

public class SimpleFactory {
    //static 方法2
    public static 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;
    }
}
OrderPizza类
public class OrderPizza {
 //定义一个简单工厂对象
    SimpleFactory simpleFactory;
    Pizza pizza=null;
    public OrderPizza(SimpleFactory simpleFactory){
        setSimpleFactory(simpleFactory);
    }
    public void setSimpleFactory(SimpleFactory simpleFactory){
        String orderType ="";
        this.simpleFactory=simpleFactory;//设置简单工厂对象
        do{
            orderType=gettype();
            pizza=SimpleFactory.createPizza(orderType);
            //输出pizza信息
            if(pizza!=null){
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            }else{
                System.out.println("订购失败");
                break;
            }
        }while(true);
    }
    //可以获取客户系统希望订购的披萨种类
    private String gettype(){
        try{
            BufferedReader strln=new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza type:");
            String str=strln.readLine();
            return str;
        }catch(IOException e){
            e.printStackTrace();
            return "";
        }
    }
}
调用类
 */ //相当于客户端发送,订单任务
public class PizzaStore {
    public static void main(String[] args){
       // new OrderPizza(); 原型
        //使用简单工厂模式
        new OrderPizza(new SimpleFactory());
        System.out.println("程序运行结束");
    }
}

运行结果

输入greek,将会看到:
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!