首页 > 编程语言 >Java 工厂方法设计模式

Java 工厂方法设计模式

时间:2023-12-27 14:48:13浏览次数:41  
标签:设计模式 Java String pizzaName void 工厂 pizza public Pizza

需求:
Pizza 有以下几个方法
prepare() 准备食材
bake() 烘焙
cut() 切割
box() 装盒

现在有2种披萨且和2地区有关,成都地区第一种是CDApplePizza,第二种是CDCheesePizza。北京地区的BJApplePizza和BJApplePizza。

PizzaStore有点单系统Order(city,pizzaType) 根据pizza type去制作对应的Pizza。

Pizza 抽象类

public abstract class Pizza {

    String pizzaName = null;

    public abstract void prepare();

    public void bake(){
        System.out.println(pizzaName+" 开始烘焙");
    }

    public void  cut(){
        System.out.println(pizzaName+" 开始切割");
    }

    public void  box(){
        System.out.println(pizzaName+" 开始打包");
    }

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

}

Pizza实现类

public class BJApplePizza extends Pizza {

    @Override
    public void prepare() {
        setName("北京Apple披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}

public class BJCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("北京Cheese披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}

public class CDApplePizza extends Pizza {

    @Override
    public void prepare() {
        setName("成都Apple披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}
public class CDCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("成都Cheese披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}

order抽象类

public abstract class OrderPizza {
    String orderType = null;
    String city = null;

    public OrderPizza(String city,String orderType){
        System.out.println("OrderPizza");
        this.orderType = orderType;
        this.city = city;
        Pizza pizza = createPizza();
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

    }

    abstract Pizza createPizza();

}

order实现类

public class OrderPizzaFactory extends OrderPizza{


    public OrderPizzaFactory(String city, String orderType) {
        super(city,orderType);
    }

    @Override
    Pizza createPizza( ) {
        Pizza pizza;

        if (city.equalsIgnoreCase("CD")){
            if (orderType.equalsIgnoreCase("cheese")){
                pizza = new CDCheesePizza();
            }else {
                pizza = new CDApplePizza();
            }
        }else {
            if (orderType.equalsIgnoreCase("cheese")){
                pizza = new BJCheesePizza();
            }else {
                pizza = new BJApplePizza();
            }
        }
        return pizza;
    }
}

Pizza store

public class PizzaStore {
    public static void main(String[] args) {

        new OrderPizzaFactory("BJ","cheese");
        new OrderPizzaFactory("CD","apple");

    }

}

输出结果

标签:设计模式,Java,String,pizzaName,void,工厂,pizza,public,Pizza
From: https://www.cnblogs.com/yan061/p/17930494.html

相关文章

  • java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队
    背景近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到人在地铁上,bug从咚咚来~没有任何修改的服务接口,抛出异常:java.lang.ClassCastException:java.util.HashMapcannotbecasttocn.xxx.xxx.xxx.xxx.Ba......
  • java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队
    背景近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到人在地铁上,bug从咚咚来~没有任何修改的服务接口,抛出异常:java.lang.ClassCastException:java.util.HashMapcannotbecasttocn.xxx.xxx.xxx.xx......
  • 什么是java包冲突
    Java包冲突指的是在Java应用程序中存在多个版本的相同包或类的情况。这可能导致一些问题,比如:1.版本不兼容:不同的库可能提供相同包的不同版本,而这些版本可能具有不同的方法、功能或者API。如果应用程序使用了这些不同版本的库,可能会出现方法不兼容或行为不一致的问题。2.运......
  • Java 简单工厂模式
    需求:Pizza有以下几个方法prepare()准备食材bake()烘焙cut()切割box()装盒现在有两种披萨,第一种是ApplePizza,第二种是CheesePizza。PizzaStore有点单系统Order(pizzaType)根据pizzatype去制作对应的Pizza。Pizza的抽象类publicabstractclassPizza{Strin......
  • 无涯教程-Java加密 - 创建签名
    数字签名使无涯教程可以验证签名的作者,日期和时间,并对邮件内容进行身份验证。它还包括用于其他功能的身份验证功能。创建数字签名现在学习如何创建数字签名。您可以按照以下步骤使用Java创建数字签名。步骤1-创建KeyPairGenerator对象KeyPairGenerator类提供getInstan......
  • Java必知必会系列:机器学习与数据挖掘
    1.背景介绍机器学习和数据挖掘是计算机科学领域的两个重要分支,它们在现实生活中的应用也越来越广泛。机器学习是人工智能的一个分支,它研究如何让计算机自动学习和理解数据,从而实现对未知数据的预测和分类。数据挖掘则是对大量数据进行分析和挖掘,以发现隐藏在数据中的模式和规律,从而......
  • Java应用怎么调优?【转】
    一、Java应用调优的关键指标调优之前首先我们要知道怎样才算是“优”,不能笼统的说我的程序性能很好,所以就需要有一个具体的指标来衡量性能情况,而在JVM里面衡量性能两个指标分别“吞吐量”和“停顿时间”。吞吐量程序运行过程中执行两种任务,分别是执行业务代码和进行垃圾回收,吞......
  • JavaScript事件
    事件JavaScript事件,就是用户或浏览器本身的某种行为,一般是用户对页面的一些动作引起的,比如用户的点击某个链接、在文本框中输入文本等。绑定对应的事件方法一:直接在元素上面添加一个事件属性语法:方法二:在js中找到dom添加事件语法:方法三:使用addEventListener 语法:注意......
  • Java多线程:状态转移详解
    Java中的线程在其生命周期内会经历不同的状态。理解这些状态以及它们之间的转换对于掌握多线程编程至关重要。本文将详细介绍Java线程的状态以及它们之间的转换机制。线程生命周期状态根据Java语言规范和java.lang.Thread.State枚举定义,线程的状态主要分为以下几种:新建(NEW):创建后尚......
  • 【Java核心基础】一文带你了解Java中构造方法的重要作用!
    构造方法是Java中用于初始化对象状态的特殊方法,与类同名且无返回类型,创建对象时自动调用,可重载以提供灵活性;若未定义,编译器提供默认构造方法,它可加访问修饰符,可用super()调用父类构造方法,构造方法不可继承或直接调用,可用于依赖注入。定义在Java中,构造方法专门负责初始化新创......