亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例詳解

 更新時(shí)間:2018年05月18日 10:47:11   作者:chengqiuming  
這篇文章主要介紹了Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例,較為詳細(xì)的分析了抽象工廠模式的定義、原理并結(jié)合實(shí)例形式分析了Java使用抽象工廠模式實(shí)現(xiàn)肯德基消費(fèi)案例的步驟與相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例。分享給大家供大家參考,具體如下:

一、模式定義

抽象工廠模式提供了一個(gè)接口,用于創(chuàng)建相關(guān)或者依賴對象的家族,而不需要指定具體實(shí)現(xiàn)類。

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

二、模式舉例

1 模式分析

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

2 抽象工廠模式的靜態(tài)建模

3 代碼示例

3.1 抽象食物的建立

抽象食物——AbstractBaseFood

package com.demo.factory.model;
/**
 *
 * 食物基類
 *
 * @author maofw
 *
 */
public abstract class AbstractBaseFood
{
  // 類別
  protected String kind;
  // 數(shù)量
  protected int num;
  // 價(jià)格
  protected float price;
  // 合計(jì)
  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 + "風(fēng)味漢堡,\t單價(jià):" + this.price + ",\t數(shù)量:" + this.num + ",\t合計(jì):" + 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 + "風(fēng)味雞翅,\t單價(jià):" + this.price + ",\t數(shù)量:" + this.num + ",\t合計(jì):" + this.totalPrice());
  }
}

薯?xiàng)l基類——FrenchFries

package com.demo.factory.model;
/**
 * 薯?xiàng)l基類
 *
 * @author maofw
 *
 */
public abstract class FrenchFries extends AbstractBaseFood implements IFood
{
  public void printMesage()
  {
    System.out.println("--" + this.kind + "風(fēng)味薯?xiàng)l,\t單價(jià):" + this.price + ",\t數(shù)量:" + this.num + ",\t合計(jì):" + 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單價(jià):" + this.price + ",\t數(shù)量:" + this.num + ",\t合計(jì):" + this.totalPrice());
  }
}

3.3 創(chuàng)建具體的食物

麻辣雞腿漢堡——ChinaHanburm

package com.demo.factory.model.kfc;
import com.demo.factory.model.Hamburg;
/**
 * 中國風(fēng)味的麻辣雞腿漢堡
 *
 * @author maofw
 *
 */
public class ChinaHanburm extends Hamburg
{
  /**
   * 構(gòu)造方法
   *
   * @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;
/**
 * 雞翅實(shí)現(xiàn)類
 *
 * @author maofw
 *
 */
public class ChinaChickenWings extends ChickenWings
{
  public ChinaChickenWings(int num)
  {
    this.kind = "奧爾良";
    this.price = 2.5f;
    this.num = num;
  }
}

薯?xiàng)l——ChinaFrenchFries

package com.demo.factory.model.kfc;
import com.demo.factory.model.FrenchFries;
/**
 * 薯?xiàng)l實(shí)現(xiàn)類
 *
 * @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;
/**
 * 飲料實(shí)現(xiàn)類
 *
 * @author maofw
 *
 */
public class ChinaBeverage extends Beverage
{
  public ChinaBeverage(int num)
  {
    this.kind = "可樂";
    this.price = 7.0f;
    this.num = num;
  }
}

3.4 建立工廠

創(chuàng)建抽象肯德基工廠——IKfcFactory 生產(chǎn)抽象食物

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
{
  // 生產(chǎn)漢堡
  public Hamburg createHamburg(int num);
  // 生產(chǎn)薯?xiàng)l
  public FrenchFries createFrenchFries(int num);
  // 生產(chǎn)雞翅
  public ChickenWings createChickenWings(int num);
  // 生產(chǎn)飲料
  public Beverage createBeverage(int num);
}

創(chuàng)建具體肯德基工廠——ChinaKfcFactory 生產(chǎn)具體食物

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
{
  // 生產(chǎn)可樂
  public Beverage createBeverage(int num)
  {
    return new ChinaBeverage(num);
  }
  // 生產(chǎn)奧爾良烤雞翅
  public ChickenWings createChickenWings(int num)
  {
    return new ChinaChickenWings(num);
  }
  // 生產(chǎn)薯?xiàng)l
  public FrenchFries createFrenchFries(int num)
  {
    return new ChinaFrenchFries(num);
  }
  // 生產(chǎn)麻辣風(fēng)味雞腿漢堡
  public Hamburg createHamburg(int num)
  {
    return new ChinaHanburm(num);
  }
}

3.5 創(chuàng)建客戶類——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;
  // 構(gòu)造方法將抽象工廠作為參數(shù)傳入
  public Customer(IKfcFactory kfcFactory)
  {
    this.kfcFactory = kfcFactory;
  }
  /**
   * 訂購食物
   */
  // 訂購麻辣雞腿漢堡
  public float orderHamburg(int num)
  {
    // 獲得麻辣雞腿漢堡
    Hamburg hamburg = kfcFactory.createHamburg(num);
    // 輸出訂購信息
    hamburg.printMesage();
    // 返回總價(jià)
    return hamburg.totalPrice();
  }
  // 訂購?qiáng)W爾良烤雞翅
  public float orderChickenWings(int num)
  {
    // 獲得奧爾良烤雞翅
    ChickenWings chickenWings = kfcFactory.createChickenWings(num);
    // 輸出訂購信息
    chickenWings.printMesage();
    // 返回總價(jià)
    return chickenWings.totalPrice();
  }
  // 訂購薯?xiàng)l
  public float orderFrenchFries(int num)
  {
    // 獲得薯?xiàng)l
    FrenchFries frenchFries = kfcFactory.createFrenchFries(num);
    // 輸出訂購信息
    frenchFries.printMesage();
    // 返回總價(jià)
    return frenchFries.totalPrice();
  }
  // 訂購可樂
  public float orderBeverage(int num)
  {
    // 獲得可樂
    Beverage beverage = kfcFactory.createBeverage(num);
    // 輸出訂購信息
    beverage.printMesage();
    // 返回總價(jià)
    return beverage.totalPrice();
  }
}

3.6 故事情節(jié)展現(xiàn)

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
{
  /**
   * 主應(yīng)用程序方法
   *
   * @param args
   */
  public static void main(String[] args)
  {
    /**
     * 定義一個(gè)肯德基(IKfcFactory類型)
     */
    IKfcFactory kfcFactory = new ChinaKfcFactory();
    /**
     * 爸爸和兒子走進(jìn)肯德基,準(zhǔn)備點(diǎn)餐
     */
    Customer customer = new Customer(kfcFactory);
    /**
     * 開始點(diǎn)餐
     */
    // 一個(gè)麻辣雞腿漢堡
    float hamhurgMoney = customer.orderHamburg(1);
    // 四個(gè)奧爾良烤雞翅
    float chickenWingsMoney = customer.orderChickenWings(4);
    // 一包薯?xiàng)l
    float frenchFriesMoney = customer.orderFrenchFries(1);
    // 兩杯可樂
    float beverageMoney = customer.orderBeverage(2);
    System.out.println("總計(jì):" + (hamhurgMoney + chickenWingsMoney + frenchFriesMoney + beverageMoney));
  }
}

運(yùn)行結(jié)果:

--麻辣風(fēng)味漢堡, 單價(jià):14.0, 數(shù)量:1, 合計(jì):14.0
--奧爾良風(fēng)味雞翅, 單價(jià):2.5, 數(shù)量:4, 合計(jì):10.0
--普通風(fēng)味薯?xiàng)l, 單價(jià):8.0, 數(shù)量:1, 合計(jì):8.0
--可樂飲料, 單價(jià):7.0, 數(shù)量:2, 合計(jì):14.0
總計(jì):46.0

三、該模式的設(shè)計(jì)原則

1 多用對象組合,少用繼承
2 針對抽象編程,不針對實(shí)現(xiàn)編程
3 產(chǎn)品對象通過工廠暴露的方法創(chuàng)建

四、使用場合

1 創(chuàng)建產(chǎn)品家族,相關(guān)產(chǎn)品集合在一起使用的時(shí)候;
2 想要提供一個(gè)產(chǎn)品類庫,并只想顯示其接口而不是實(shí)現(xiàn)時(shí);
3 通過組合的方式使用工廠時(shí)。

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Springboot通過谷歌Kaptcha?組件生成圖形驗(yàn)證碼功能

    Springboot通過谷歌Kaptcha?組件生成圖形驗(yàn)證碼功能

    Kaptcha是谷歌開源的一款簡單實(shí)用的圖形驗(yàn)證碼組件。我個(gè)人推薦它的最大原因是容易上手,采用約定大于配置的方式,快速契合到項(xiàng)目中,這篇文章主要介紹了Springboot通過谷歌Kaptcha組件生成圖形驗(yàn)證碼的方法,需要的朋友可以參考下
    2023-05-05
  • java_object的簡單使用詳解

    java_object的簡單使用詳解

    下面小編就為大家?guī)硪黄猨ava_object的簡單使用詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • 一篇文章教你將JAVA的RabbitMQz與SpringBoot整合

    一篇文章教你將JAVA的RabbitMQz與SpringBoot整合

    這篇文章主要介紹了如何將JAVA的RabbitMQz與SpringBoot整合,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-09-09
  • SSH框架網(wǎng)上商城項(xiàng)目第9戰(zhàn)之添加和更新商品類別功能實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第9戰(zhàn)之添加和更新商品類別功能實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第9戰(zhàn)之添加和更新商品類別功能實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-06-06
  • Spring?Boot騰訊云短信申請與使用示例

    Spring?Boot騰訊云短信申請與使用示例

    這篇文章主要介紹了Spring?Boot騰訊云短信申請與使用,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • java創(chuàng)建以任意圖片為背景的窗口

    java創(chuàng)建以任意圖片為背景的窗口

    這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建以任意圖片為背景的窗口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • springboot yml配置文件使用@project.xxxx@啟動報(bào)錯(cuò)Do not use @ for indentation問題

    springboot yml配置文件使用@project.xxxx@啟動報(bào)錯(cuò)Do not 

    這篇文章主要介紹了springboot yml配置文件使用@project.xxxx@啟動報(bào)錯(cuò)Do not use @ for indentation問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 如何開發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序

    如何開發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序

    HTTP/HTTPS是最常見的協(xié)議套件之一,并且隨著智能手機(jī)的成功,它的應(yīng)用也日益廣泛,因?yàn)閷τ谌魏喂緛碚f,擁有一個(gè)可以被移動設(shè)備訪問的網(wǎng)站幾乎是必須的。下面就來看看如何開發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序
    2021-06-06
  • 換了最新的idea如何將原來舊版本的idea設(shè)置導(dǎo)進(jìn)新的idea中

    換了最新的idea如何將原來舊版本的idea設(shè)置導(dǎo)進(jìn)新的idea中

    這篇文章主要介紹了換了最新的idea如何將原來舊版本的idea設(shè)置導(dǎo)進(jìn)新的idea中,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng)

    Java實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論