欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)或者依賴對(duì)象的家族,而不需要指定具體實(shí)現(xiàn)類。

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

二、模式舉例

1 模式分析

我們借用爸爸和兒子到肯德基店消費(fèi)這一場(chǎng)景來說明這一模式,進(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;
/**
 * 中國(guó)風(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;
  }
  /**
   * 訂購(gòu)食物
   */
  // 訂購(gòu)麻辣雞腿漢堡
  public float orderHamburg(int num)
  {
    // 獲得麻辣雞腿漢堡
    Hamburg hamburg = kfcFactory.createHamburg(num);
    // 輸出訂購(gòu)信息
    hamburg.printMesage();
    // 返回總價(jià)
    return hamburg.totalPrice();
  }
  // 訂購(gòu)?qiáng)W爾良烤雞翅
  public float orderChickenWings(int num)
  {
    // 獲得奧爾良烤雞翅
    ChickenWings chickenWings = kfcFactory.createChickenWings(num);
    // 輸出訂購(gòu)信息
    chickenWings.printMesage();
    // 返回總價(jià)
    return chickenWings.totalPrice();
  }
  // 訂購(gòu)薯?xiàng)l
  public float orderFrenchFries(int num)
  {
    // 獲得薯?xiàng)l
    FrenchFries frenchFries = kfcFactory.createFrenchFries(num);
    // 輸出訂購(gòu)信息
    frenchFries.printMesage();
    // 返回總價(jià)
    return frenchFries.totalPrice();
  }
  // 訂購(gòu)可樂
  public float orderBeverage(int num)
  {
    // 獲得可樂
    Beverage beverage = kfcFactory.createBeverage(num);
    // 輸出訂購(gòu)信息
    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 多用對(duì)象組合,少用繼承
2 針對(duì)抽象編程,不針對(duì)實(shí)現(xiàn)編程
3 產(chǎn)品對(duì)象通過工廠暴露的方法創(chuàng)建

四、使用場(chǎng)合

1 創(chuàng)建產(chǎn)品家族,相關(guān)產(chǎn)品集合在一起使用的時(shí)候;
2 想要提供一個(gè)產(chǎn)品類庫(kù),并只想顯示其接口而不是實(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緩存操作技巧匯總

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

相關(guān)文章

最新評(píng)論