前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式-工厂方法模式

Java设计模式-工厂方法模式

作者头像
桑鱼
发布2020-03-16 23:25:18
3480
发布2020-03-16 23:25:18
举报

基本介绍

工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类

需求说明

1)披萨的种类:如北京的奶酪pizza、北京的呼叫pizza或者是伦敦的奶酪pizza、伦敦的胡椒pizza

2)披萨的制作过程包括:prepare、bake、cut、box 3)完成披萨店订购功能

UML图

代码

代码语言:javascript
复制
// Pizza 抽象类
public abstract class Pizza {
    protected 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;
    }
}
代码语言:javascript
复制
// BJCheesePizza类继承Pizza
public class BJCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("BJCheesePizza");
        System.out.println("BJCheesePizza 准备原材料");
    }
}
代码语言:javascript
复制
// BJPepperPizza类继承Pizza类
public class BJPepperPizza extends Pizza {
    @Override
    public void prepare() {
        setName("BJPepperPizza");
        System.out.println("BJPepperPizza 准备原材料");
    }
}
代码语言:javascript
复制
// LDCheesePizza 类继承Pizza
public class LDCheesePizza extends Pizza {
    @Override
    public void prepare() {
        setName("LDCheesePizza");
        System.out.println("LDCheesePizza 准备原材料");
    }
}
代码语言:javascript
复制
// LDPepperPizza 类继承Pizza
public class LDPepperPizza extends Pizza {
    @Override
    public void prepare() {
        setName("LDPepperPizza");
        System.out.println("LDPepperPizza 准备原材料");
    }
}
代码语言:javascript
复制
// OrderPizza抽象类
public abstract class OrderPizza {
    abstract Pizza createPizza(String orderType);
    public OrderPizza(){
        Pizza pizza = null;
        String orderType;
        do{
            orderType = getType();
            pizza = createPizza(orderType);
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }while (true);
    }
    private String getType() {
        try{
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza : ");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
}
代码语言:javascript
复制
// BJOrderPizza 类继承OrderPizza并实现createPizza()方法
public class BJOrderPizza extends OrderPizza{
    Pizza createPizza(String orderType){
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new BJCheesePizza();
        }else if(orderType.equals("pepper")){
            pizza = new BJPepperPizza();
        }
        return pizza;
    }
}
代码语言:javascript
复制
// LDOrderPizza类继承OrderPizza 并实现createPizza()方法
public class LDOrderPizza extends OrderPizza {
    Pizza createPizza(String orderType){
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new LDCheesePizza();
        }else if(orderType.equals("pepper")){
            pizza = new LDPepperPizza();
        }
        return pizza;
    }
}
代码语言:javascript
复制
//PizzaStore类
public class PizzaStore {
    private static String getCountryName(){
        try{
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input CountryName : ");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
    public static void main(String[] args) {
        String loc = getCountryName();
        if(loc.equals("bj")){
            new BJOrderPizza();
        }else {
            new LDOrderPizza();
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本介绍
  • 需求说明
  • UML图
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档