在简单工厂模式中,客户端不需要知道具体产品的类名,只需知道产品对应的参数,由工厂类根据参数来创建具体的产品实例。
下面是一个简单工厂模式的示例:
// 产品接口
interface Product {
void produce();
}
// 具体产品A
class ConcreteProductA implements Product {
@Override
public void produce() {
System.out.println("生产具体产品A");
}
}
// 具体产品B
class ConcreteProductB implements Product {
@Override
public void produce() {
System.out.println("生产具体产品B");
}
}
// 简单工厂类
class SimpleFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
}
return null;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Product productA = SimpleFactory.createProduct("A");
productA.produce();
Product productB = SimpleFactory.createProduct("B");
productB.produce();
}
}
在这个例子中,SimpleFactory 类负责根据参数创建不同的产品实例。客户端只需调用工厂类的方法并传入参数,无需知道具体产品的实现细节。
实际上,SimpleDateFormat 就是 JDK 中的简单工厂模式的应用。通过传入不同的日期格式参数,可以得到相应的 SimpleDateFormat 实例。
要注意的是,简单工厂模式对于新增产品的扩展确实不够灵活,如果需要支持新增产品,需要修改工厂类的代码。这也是简单工厂模式的缺点之一。