在Java編程的課堂上,我們常常需要借助生活中的場景來理解抽象的設計模式。今天,讓我們以“餐飲”為例,探討設計模式中的工廠模式(Factory Pattern)。餐飲的本質是滿足人們對食物的需求,而工廠模式的本質是解決對象創建的復雜性問題——兩者在“生產”與“需求”的邏輯上有著驚人的相似性。
想象一家餐廳的運營場景:
這種“點餐與制作分離”的模式,正是工廠模式的核心思想:將對象的創建與使用解耦,讓系統更靈活、可維護。
工廠模式通常分為三種形式:簡單工廠、工廠方法、抽象工廠。我們以餐飲為例,用Java代碼逐步深入。
定義一個菜品接口,不同菜品實現具體做法:`java
interface Dish {
void cook();
}
class BraisedPork implements Dish {
@Override
public void cook() {
System.out.println("烹飪紅燒肉:炒糖色、慢燉...");
}
}
class SteamedFish implements Dish {
@Override
public void cook() {
System.out.println("烹飪清蒸魚:腌制、清蒸...");
}
}`
創建一個“廚房工廠”,根據菜品名生產對象:`java
class KitchenFactory {
public static Dish createDish(String name) {
switch (name) {
case "紅燒肉": return new BraisedPork();
case "清蒸魚": return new SteamedFish();
default: throw new IllegalArgumentException("未知菜品");
}
}
}`
顧客點餐時,直接調用工廠:`java
public class Customer {
public static void main(String[] args) {
Dish dish = KitchenFactory.createDish("紅燒肉");
dish.cook(); // 輸出:烹飪紅燒肉:炒糖色、慢燉...
}
}`
優點:客戶與具體菜品解耦。
缺點:新增菜品需修改工廠類,違反開閉原則。
為每類菜品設立獨立“廚師”(工廠),通過抽象接口約束:`java
abstract class Restaurant {
// 抽象工廠方法
public abstract Dish createDish();
public void serve() {
Dish dish = createDish();
System.out.print("上菜:");
dish.cook();
}
}
class ChineseRestaurant extends Restaurant {
@Override
public Dish createDish() {
return new BraisedPork(); // 中餐廳專做紅燒肉
}
}
class JapaneseRestaurant extends Restaurant {
@Override
public Dish createDish() {
return new Sashimi(); // 日料店專做刺身
}
}`
優點:新增菜品類型時,只需新增對應餐廳類,無需修改已有代碼。
當需要創建一系列相關菜品(如套餐:主食+飲料+甜點),抽象工廠提供了更高層次的抽象:`java
// 抽象菜品族
interface MainCourse { void serve(); }
interface Drink { void pour(); }
// 具體族:中式套餐
class Rice implements MainCourse {
@Override
public void serve() { System.out.println("提供米飯"); }
}
class Tea implements Drink {
@Override
public void pour() { System.out.println("沏茶"); }
}
// 抽象工廠
interface MealFactory {
MainCourse createMainCourse();
Drink createDrink();
}
// 具體工廠:中式套餐工廠
class ChineseMealFactory implements MealFactory {
@Override
public MainCourse createMainCourse() { return new Rice(); }
@Override
public Drink createDrink() { return new Tea(); }
}`
工廠模式的精髓,正如餐飲中“點餐-制作”的分離:
在Java開發中,工廠模式常見于:
BeanFactoryCalendar.getInstance()LoggerFactory)通過餐飲的類比,我們不僅理解了工廠模式的結構,更領悟了其設計哲學:封裝變化、降低耦合、提升擴展性。這正是Java乃至所有軟件工程追求的核心目標之一。
記住:好的代碼如一道佳肴,需要恰當的“烹飪方式”(設計模式)來呈現其價值。
如若轉載,請注明出處:http://m.skt123.cn/product/70.html
更新時間:2026-02-17 19:31:44