JAVA中的工厂模式 {#java%E4%B8%AD%E7%9A%84%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F}
一、工厂模式概述 {#%E4%B8%80%E3%80%81%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F%E6%A6%82%E8%BF%B0}
工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但具体创建的对象类型可以在运行时决定。在JAVA中,工厂模式通过封装对象的创建过程,使得代码更加灵活和可扩展。
二、工厂模式的分类 {#%E4%BA%8C%E3%80%81%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%88%86%E7%B1%BB}
根据工厂模式的实现方式,可以将其分为简单工厂模式、工厂方法模式和抽象工厂模式。
1. 简单工厂模式 {#1.-%E7%AE%80%E5%8D%95%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F}
简单工厂模式是最简单的工厂模式,它通过一个静态方法来创建对象。客户端只需要传入相应的参数,即可得到对应的对象。但是,简单工厂模式违反了开闭原则,当需要增加新的产品时,需要修改工厂类的代码。
2. 工厂方法模式 {#2.-%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F}
工厂方法模式是对简单工厂模式的改进,它定义了一个创建对象的接口,但让子类决定具体要实例化哪一个类。工厂方法模式将对象的创建过程延迟到子类中,使得系统更加灵活和可扩展。
3. 抽象工厂模式 {#3.-%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F}
抽象工厂模式是工厂方法模式的升级版,它用来创建一系列相关或者互相依赖的对象,而不需要指定它们具体的类。抽象工厂模式为创建一组相关对象提供了一种接口,客户端可以使用这个接口来创建对象,而不需要知道具体创建的是哪个类的对象。
三、工厂模式的示例 {#%E4%B8%89%E3%80%81%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F%E7%9A%84%E7%A4%BA%E4%BE%8B}
下面以简单工厂模式为例,介绍如何在JAVA中实现工厂模式。
1. 创建产品接口 {#1.-%E5%88%9B%E5%BB%BA%E4%BA%A7%E5%93%81%E6%8E%A5%E5%8F%A3}
首先,创建一个产品接口Product
,定义产品的通用方法。
public interface Product {
void use();
}
2. 创建具体产品类 {#2.-%E5%88%9B%E5%BB%BA%E5%85%B7%E4%BD%93%E4%BA%A7%E5%93%81%E7%B1%BB}
然后,创建实现Product
接口的具体产品类ConcreteProductA
和ConcreteProductB
。
public class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("使用具体产品A");
}
}
`public class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("使用具体产品B");
}
}
`
3. 创建工厂类 {#3.-%E5%88%9B%E5%BB%BA%E5%B7%A5%E5%8E%82%E7%B1%BB}
最后,创建一个工厂类SimpleFactory
,提供一个静态方法createProduct
来创建产品对象。客户端可以通过调用这个方法并传入参数来得到相应的产品对象。
public class SimpleFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
} else {
throw new IllegalArgumentException("无效的产品类型:" + type);
}
}
}
4. 客户端使用示例 {#4.-%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B}
在客户端代码中,可以通过调用SimpleFactory
的createProduct
方法来创建产品对象,并调用其use
方法。
public class Client {
public static void main(String[] args) {
Product productA = SimpleFactory.createProduct("A");
productA.use(); // 输出:使用具体产品A
Product productB = SimpleFactory.createProduct("B");
productB.use(); // 输出:使用具体产品B
}
}