您好,登錄后才能下訂單哦!
怎么在Java中利用抽象工廠模式實現肯德基消費案例?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
一、模式定義
抽象工廠模式提供了一個接口,用于創建相關或者依賴對象的家族,而不需要指定具體實現類。
抽象工廠模式允許客戶使用抽象接口來創建一組相關的產品,客戶類和工廠類分開,客戶需要任何產品的時候,只需要向工廠請求即可,客戶無須修改就可以獲得新產品。
二、模式舉例
1 模式分析
我們借用爸爸和兒子到肯德基店消費這一場景來說明這一模式,進行抽象分析后的截圖如下
2 抽象工廠模式的靜態建模
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
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。