你有没有想过,写代码其实和开一家奶茶店差不多?比如顾客来买奶茶,不说具体做法,只说要一杯‘珍珠奶茶’或者‘椰果奶茶’,店员就知道该怎么做。这个过程背后其实就藏着一个编程里常用的设计思路——Java工厂模式。
什么是工厂模式?
在Java开发中,我们经常需要创建各种对象。如果每个地方都用 new 来直接生成对象,代码就会变得很乱,改起来也麻烦。工厂模式就是为了解决这个问题,它把对象的创建过程集中管理,就像奶茶店的制作台,统一出餐,不乱套。
举个例子,假设你在做一个订单系统,要创建不同类型的订单:普通订单、会员订单、团购订单。如果不使用工厂模式,代码可能到处都是 new OrderA()、new OrderB(),一旦需求变了,就得翻遍整个项目去改。
简单工厂:一个人搞定所有
最基础的是简单工厂模式。它用一个类专门负责创建对象。比如:
public class OrderFactory {
public Order createOrder(String type) {
if ("normal".equals(type)) {
return new NormalOrder();
} else if ("vip".equals(type)) {
return new VipOrder();
} else if ("group".equals(type)) {
return new GroupOrder();
} else {
return null;
}
}
}
以后要用哪种订单,只需要告诉工厂一声,它就给你返回对应的对象,调用方完全不用关心内部怎么做的。
工厂方法:每个产品都有自己的生产线
简单工厂有个问题:每次加新产品,还得回头去改工厂类。这不符合“对扩展开放、对修改关闭”的原则。这时候可以用工厂方法模式。
它让每个具体产品对应一个具体的工厂。比如:
interface OrderFactory {
Order createOrder();
}
class NormalOrderFactory implements OrderFactory {
public Order createOrder() {
return new NormalOrder();
}
}
class VipOrderFactory implements OrderFactory {
public Order createOrder() {
return new VipOrder();
}
}
这样新增一种订单,只要多写一个工厂类就行,老代码不用动,维护起来轻松多了。
什么时候该用工厂模式?
如果你发现代码里有大量 instanceof 判断,或者 new 出来的对象类型五花八门,而且将来可能还会加新的类型,那就可以考虑上工厂模式了。
它不是万能药,但能让代码更清晰、更容易扩展。特别是在团队协作中,每个人负责不同的产品线,工厂模式能减少互相之间的干扰。
就像奶茶店分工明确,点单的不用懂怎么做,后厨也不用管谁来买的,各司其职,效率自然高。