中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中利用抽象工廠模式實現肯德基消費案例

發布時間:2021-05-27 17:05:35 來源:億速云 閱讀:131 作者:Leah 欄目:編程語言

怎么在Java中利用抽象工廠模式實現肯德基消費案例?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、模式定義

抽象工廠模式提供了一個接口,用于創建相關或者依賴對象的家族,而不需要指定具體實現類。

抽象工廠模式允許客戶使用抽象接口來創建一組相關的產品,客戶類和工廠類分開,客戶需要任何產品的時候,只需要向工廠請求即可,客戶無須修改就可以獲得新產品。

二、模式舉例

1 模式分析

我們借用爸爸和兒子到肯德基店消費這一場景來說明這一模式,進行抽象分析后的截圖如下

怎么在Java中利用抽象工廠模式實現肯德基消費案例

2 抽象工廠模式的靜態建模

怎么在Java中利用抽象工廠模式實現肯德基消費案例

3 代碼示例

3.1 抽象食物的建立

抽象食物——AbstractBaseFood

package com.demo.factory.model;
/**
 *
 * 食物基類
 *
 * @author maofw
 *
 */
public abstract class AbstractBaseFood
{
  // 類別
  protected String kind;
  // 數量
  protected int num;
  // 價格
  protected float price;
  // 合計
  public float totalPrice()
  {
    return this.num * this.price;
  }
}

食物接口——IFood

package com.demo.factory.model;
/**
 * 抽象食物接口
 *
 * @author maofw
 *
 */
public interface IFood
{
  /**
   * 打印輸出食物信息
   */
  void printMesage();
}

3.2 建立不同食物的抽象基類

漢堡基類——Hamburg

package com.demo.factory.model;
/**
 * 漢堡基類
 *
 * @author maofw
 *
 */
public abstract class Hamburg extends AbstractBaseFood implements IFood
{
  public void printMesage()
  {
    System.out.println("--" + this.kind + "風味漢堡,\t單價:" + this.price + ",\t數量:" + this.num + ",\t合計:" + this.totalPrice());
  }
}

雞翅基類——ChickenWings

package com.demo.factory.model;
/**
 * 雞翅基類
 *
 * @author maofw
 *
 */
public abstract class ChickenWings extends AbstractBaseFood implements IFood
{
  public void printMesage()
  {
    System.out.println("--" + this.kind + "風味雞翅,\t單價:" + this.price + ",\t數量:" + this.num + ",\t合計:" + this.totalPrice());
  }
}

薯條基類——FrenchFries

package com.demo.factory.model;
/**
 * 薯條基類
 *
 * @author maofw
 *
 */
public abstract class FrenchFries extends AbstractBaseFood implements IFood
{
  public void printMesage()
  {
    System.out.println("--" + this.kind + "風味薯條,\t單價:" + this.price + ",\t數量:" + this.num + ",\t合計:" + this.totalPrice());
  }
}

飲料基類——Beverage

package com.demo.factory.model;
/**
 * 飲料基類
 *
 * @author maofw
 *
 */
public abstract class Beverage extends AbstractBaseFood implements IFood
{
  public void printMesage()
  {
    System.out.println("--" + this.kind + "飲料,\t單價:" + this.price + ",\t數量:" + this.num + ",\t合計:" + this.totalPrice());
  }
}

3.3 創建具體的食物

麻辣雞腿漢堡——ChinaHanburm

package com.demo.factory.model.kfc;
import com.demo.factory.model.Hamburg;
/**
 * 中國風味的麻辣雞腿漢堡
 *
 * @author maofw
 *
 */
public class ChinaHanburm extends Hamburg
{
  /**
   * 構造方法
   *
   * @param kind
   * @param price
   * @param num
   */
  public ChinaHanburm(int num)
  {
    this.kind = "麻辣";
    this.price = 14.0f;
    this.num = num;
  }
}

奧爾良雞翅——ChinaChickenWings

package com.demo.factory.model.kfc;
import com.demo.factory.model.ChickenWings;
/**
 * 雞翅實現類
 *
 * @author maofw
 *
 */
public class ChinaChickenWings extends ChickenWings
{
  public ChinaChickenWings(int num)
  {
    this.kind = "奧爾良";
    this.price = 2.5f;
    this.num = num;
  }
}

薯條——ChinaFrenchFries

package com.demo.factory.model.kfc;
import com.demo.factory.model.FrenchFries;
/**
 * 薯條實現類
 *
 * @author maofw
 *
 */
public class ChinaFrenchFries extends FrenchFries
{
  public ChinaFrenchFries(int num)
  {
    this.kind = "普通";
    this.price = 8.0f;
    this.num = num;
  }
}

可樂——ChinaBeverage

package com.demo.factory.model.kfc;
import com.demo.factory.model.Beverage;
/**
 * 飲料實現類
 *
 * @author maofw
 *
 */
public class ChinaBeverage extends Beverage
{
  public ChinaBeverage(int num)
  {
    this.kind = "可樂";
    this.price = 7.0f;
    this.num = num;
  }
}

3.4 建立工廠

創建抽象肯德基工廠——IKfcFactory 生產抽象食物

package com.demo.factory.itf;
import com.demo.factory.model.Beverage;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
/**
 * 肯德基抽象工廠基類
 *
 * @author maofw
 *
 */
public interface IKfcFactory
{
  // 生產漢堡
  public Hamburg createHamburg(int num);
  // 生產薯條
  public FrenchFries createFrenchFries(int num);
  // 生產雞翅
  public ChickenWings createChickenWings(int num);
  // 生產飲料
  public Beverage createBeverage(int num);
}

創建具體肯德基工廠——ChinaKfcFactory 生產具體食物

package com.demo.factory.itf;
import com.demo.factory.model.Beverage;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
import com.demo.factory.model.kfc.ChinaBeverage;
import com.demo.factory.model.kfc.ChinaChickenWings;
import com.demo.factory.model.kfc.ChinaFrenchFries;
import com.demo.factory.model.kfc.ChinaHanburm;
public class ChinaKfcFactory implements IKfcFactory
{
  // 生產可樂
  public Beverage createBeverage(int num)
  {
    return new ChinaBeverage(num);
  }
  // 生產奧爾良烤雞翅
  public ChickenWings createChickenWings(int num)
  {
    return new ChinaChickenWings(num);
  }
  // 生產薯條
  public FrenchFries createFrenchFries(int num)
  {
    return new ChinaFrenchFries(num);
  }
  // 生產麻辣風味雞腿漢堡
  public Hamburg createHamburg(int num)
  {
    return new ChinaHanburm(num);
  }
}

3.5 創建客戶類——Customer

package com.demo.factory.custom;
import com.demo.factory.itf.IKfcFactory;
import com.demo.factory.model.Beverage;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
/**
 * 客戶類
 *
 * @author maofw
 *
 */
public class Customer
{
  // 抽象工廠
  private IKfcFactory kfcFactory;
  // 構造方法將抽象工廠作為參數傳入
  public Customer(IKfcFactory kfcFactory)
  {
    this.kfcFactory = kfcFactory;
  }
  /**
   * 訂購食物
   */
  // 訂購麻辣雞腿漢堡
  public float orderHamburg(int num)
  {
    // 獲得麻辣雞腿漢堡
    Hamburg hamburg = kfcFactory.createHamburg(num);
    // 輸出訂購信息
    hamburg.printMesage();
    // 返回總價
    return hamburg.totalPrice();
  }
  // 訂購奧爾良烤雞翅
  public float orderChickenWings(int num)
  {
    // 獲得奧爾良烤雞翅
    ChickenWings chickenWings = kfcFactory.createChickenWings(num);
    // 輸出訂購信息
    chickenWings.printMesage();
    // 返回總價
    return chickenWings.totalPrice();
  }
  // 訂購薯條
  public float orderFrenchFries(int num)
  {
    // 獲得薯條
    FrenchFries frenchFries = kfcFactory.createFrenchFries(num);
    // 輸出訂購信息
    frenchFries.printMesage();
    // 返回總價
    return frenchFries.totalPrice();
  }
  // 訂購可樂
  public float orderBeverage(int num)
  {
    // 獲得可樂
    Beverage beverage = kfcFactory.createBeverage(num);
    // 輸出訂購信息
    beverage.printMesage();
    // 返回總價
    return beverage.totalPrice();
  }
}

3.6 故事情節展現

package com.demo.factory;
import java.lang.management.ManagementFactory;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.ResourceBundle;
import com.demo.factory.custom.Customer;
import com.demo.factory.itf.ChinaKfcFactory;
import com.demo.factory.itf.IKfcFactory;
public class MainApp
{
  /**
   * 主應用程序方法
   *
   * @param args
   */
  public static void main(String[] args)
  {
    /**
     * 定義一個肯德基(IKfcFactory類型)
     */
    IKfcFactory kfcFactory = new ChinaKfcFactory();
    /**
     * 爸爸和兒子走進肯德基,準備點餐
     */
    Customer customer = new Customer(kfcFactory);
    /**
     * 開始點餐
     */
    // 一個麻辣雞腿漢堡
    float hamhurgMoney = customer.orderHamburg(1);
    // 四個奧爾良烤雞翅
    float chickenWingsMoney = customer.orderChickenWings(4);
    // 一包薯條
    float frenchFriesMoney = customer.orderFrenchFries(1);
    // 兩杯可樂
    float beverageMoney = customer.orderBeverage(2);
    System.out.println("總計:" + (hamhurgMoney + chickenWingsMoney + frenchFriesMoney + beverageMoney));
  }
}

運行結果:

--麻辣風味漢堡, 單價:14.0, 數量:1, 合計:14.0
--奧爾良風味雞翅, 單價:2.5, 數量:4, 合計:10.0
--普通風味薯條, 單價:8.0, 數量:1, 合計:8.0
--可樂飲料, 單價:7.0, 數量:2, 合計:14.0
總計:46.0

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三门峡市| 肇庆市| 湘潭县| 陇南市| 思茅市| 望城县| 乐东| 永顺县| 乐清市| 离岛区| 增城市| 洛浦县| 建德市| 通山县| 古丈县| 孟津县| 德昌县| 桑日县| 大渡口区| 广汉市| 广宁县| 巨野县| 屏南县| 辉县市| 娄烦县| 台湾省| 监利县| 张家港市| 车致| 习水县| 卢龙县| 江油市| 邢台县| 揭西县| 昌平区| 铅山县| 香港| 邵阳县| 元阳县| 临泉县| 澄迈县|