设计模式是软件开发中的一套通用解决方案,而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中,我将为大家详细介绍简单工厂模式的概念、优缺点,以及通过一个饮料制作的案例,帮助大家更好地理解和应用这种模式。
一、简单工厂模式是什么?
简单工厂模式是一种由 一个工厂类 根据传入的参数,动态决定创建哪种产品类实例的设计模式。虽然简单工厂不属于 GOF(四人帮)提出的23种设计模式之一,但它是工厂模式家族的重要成员。
1.简单工厂的组成:
- 工厂类(Factory Class):
提供创建具体产品的功能,负责封装实例化逻辑。 - 抽象产品类(Product Interface/Abstract Class):
定义产品的共性行为,是具体产品类的父类或接口。 - 具体产品类(Concrete Product Classes):
实现或继承抽象产品类,包含具体的产品功能。
2.简单工厂的优缺点:
优点:
- 客户端无需关心对象的创建细节,只需通过工厂获取对象即可,符合 "单一职责原则"。
- 实现了对象的创建与使用分离。
缺点:
- 增加新的产品时,工厂类需要修改逻辑,不符合 "开闭原则"(对扩展开放,对修改关闭)。
- 工厂类的职责较重,可能造成类的复杂度增加。
二、案例:饮料制作工厂
1.需求描述:
我们需要设计一个饮料制作工厂,可以根据用户需求制作不同类型的饮料,包括咖啡、茶水和果汁。用户输入饮料类型后,工厂动态创建对应的饮料对象,并执行制作方法。
2.具体代码
(1)抽象产品类:Drink
abstract class Drink {
public abstract void make(); // 定义统一的制作方法
}
(2)具体产品类:Coffee
、Tea
和 Juice
public class Coffee extends Drink {
@Override
public void make() {
System.out.println("咖啡制作中");
}
}
public class Tea extends Drink {
@Override
public void make() {
System.out.println("茶水制作中");
}
}
public class Juice extends Drink {
@Override
public void make() {
System.out.println("果汁制作中");
}
}
(3)工厂类:DrinkFactory
public class DrinkFactory {
public static Drink createDrink(String type) {
if ("咖啡".equalsIgnoreCase(type)) {
return new Coffee();
} else if ("茶水".equalsIgnoreCase(type)) {
return new Tea();
} else if ("果汁".equalsIgnoreCase(type)) {
return new Juice();
} else {
throw new IllegalArgumentException("未知的饮料类型:" + type + "。请输入:咖啡、茶水或果汁!");
}
}
}
(4)测试类:SimpleFactoryTest
public class SimpleFactoryTest {
public static void main(String[] args) {
Drink coffee = DrinkFactory.createDrink("咖啡");
coffee.make(); // 输出:咖啡制作中
Drink tea = DrinkFactory.createDrink("茶水");
tea.make(); // 输出:茶水制作中
try {
Drink unknown = DrinkFactory.createDrink("牛奶");
unknown.make();
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
(5)运行结果:
咖啡制作中
茶水制作中
未知的饮料类型:牛奶。请输入:咖啡、茶水或果汁!
三、案例解析与优化建议
1.封装逻辑:
DrinkFactory
的 createDrink()
方法封装了饮料对象的创建逻辑,客户端无需直接使用 new
,只需传入饮料类型即可获得对应对象。
2.扩展性问题:
如果需要添加新饮料,比如 "牛奶",需要修改工厂类的 createDrink()
方法逻辑。这违背了 开闭原则,但在简单需求下是可以接受的。
3.改进方向:
使用枚举类型: 定义饮料类型为枚举常量,避免字符串硬编码导致错误。
动态注册: 工厂可以设计为支持动态注册新产品,减少对代码的修改。
四、总结
简单工厂模式是一种结构清晰、实现简单的设计模式,在开发中非常实用。它通过将对象的创建逻辑集中管理,使代码更具可读性和维护性。通过这次饮料制作工厂的实践,我们学会了如何应用简单工厂模式,完成了对象创建与业务逻辑的分离。
你也可以试着实现自己的简单工厂,加入更多种类的饮料或者其它领域的场景!
希望这篇博客能帮助到你。如果觉得有用,记得点赞、收藏哦!欢迎在评论区分享你的实现与想法! 😊
以上案例和博客内容由一次学习与实践经历整理而成,感谢每一次思考与成长!