8-工厂方法模式版:造手机
好的!我们现在把上面那个“造手机”的抽象工厂模式示例,改写成工厂方法模式(Factory Method),并清晰说明它们之间的结构变化和逻辑差异。
1. 🏭 工厂方法模式版:造手机
1.1. 📌 目标区别说明
对比项 | 抽象工厂模式 | 工厂方法模式 |
---|---|---|
创建目标 | 一整套相关的产品(产品族) | 单一产品的创建 |
接口内容 | 一个工厂接口定义多个产品的创建方法 | 每个工厂接口只定义一个产品的创建方法 |
扩展方式 | 添加新的产品族,需要新建一个工厂类 | 添加新产品,需要新建一个工厂类 |
我们现在就改写为:每个零件(屏幕、CPU、系统)各自一个“工厂接口 + 实现类”。
1.2. ✅ Step-by-Step 改写为工厂方法模式
1.2.1. 1️⃣ 定义产品接口(和原来一样)
interface Screen {
void display();
}
interface CPU {
void process();
}
interface OS {
void boot();
}
1.2.2. 2️⃣ 定义各自的工厂接口(每种产品一个接口)
interface ScreenFactory {
Screen createScreen();
}
interface CPUFactory {
CPU createCPU();
}
interface OSFactory {
OS createOS();
}
1.2.3. 3️⃣ 实现 Apple 版产品 + 工厂
class AppleScreen implements Screen {
public void display() {
System.out.println("Retina display");
}
}
class AppleCPU implements CPU {
public void process() {
System.out.println("A17 chip processing");
}
}
class IOS implements OS {
public void boot() {
System.out.println("iOS booting");
}
}
class AppleScreenFactory implements ScreenFactory {
public Screen createScreen() {
return new AppleScreen();
}
}
class AppleCPUFactory implements CPUFactory {
public CPU createCPU() {
return new AppleCPU();
}
}
class IOSFactory implements OSFactory {
public OS createOS() {
return new IOS();
}
}
1.2.4. 4️⃣ 同理,实现 Samsung 产品 + 工厂
class SamsungScreen implements Screen {
public void display() {
System.out.println("AMOLED display");
}
}
class SamsungCPU implements CPU {
public void process() {
System.out.println("Exynos chip processing");
}
}
class AndroidOS implements OS {
public void boot() {
System.out.println("Android booting");
}
}
class SamsungScreenFactory implements ScreenFactory {
public Screen createScreen() {
return new SamsungScreen();
}
}
class SamsungCPUFactory implements CPUFactory {
public CPU createCPU() {
return new SamsungCPU();
}
}
class AndroidOSFactory implements OSFactory {
public OS createOS() {
return new AndroidOS();
}
}
1.2.5. 5️⃣ 使用工厂方法来构建产品(客户端)
public class PhoneAssemblyLine {
public static void main(String[] args) {
// Apple 套餐
ScreenFactory screenFactory = new AppleScreenFactory();
CPUFactory cpuFactory = new AppleCPUFactory();
OSFactory osFactory = new IOSFactory();
Screen screen = screenFactory.createScreen();
CPU cpu = cpuFactory.createCPU();
OS os = osFactory.createOS();
screen.display();
cpu.process();
os.boot();
}
}
1.3. 🧠 核心对比总结
特性 | 抽象工厂模式 | 工厂方法模式 |
---|---|---|
工厂接口数量 | 1 个:负责创建所有产品(一个工厂抽象出多个方法) | 每个产品一个工厂接口(单一职责) |
扩展难度 | 添加新产品种类 → 修改工厂接口 | 添加新产品种类 → 只需添加新的工厂实现类 |
灵活性 | 更注重成套搭配,约束强 | 更灵活,可自由组合产品 |
适合场景 | 一整套产品需要一起用(产品之间强依赖) | 各产品可独立创建、组合(产品之间相对独立) |
1.4. 🎯 总结一句话
抽象工厂:我给你一整套搭配好的手机配件套餐(屏幕、CPU、系统一体)
工厂方法:你自己选每一个部件,屏幕一家,CPU 一家,系统一家,各买各的 🛒
如果你想,我也可以把这个改写版本转成 Markdown 给你放进 Obsidian !需要的话说一声~