在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://www.1258056.com/product/70.html
更新时间:2026-02-25 07:48:27