Java实现工厂模式
工厂模式是一种创建型设计模式,用于创建对象。它隐藏了对象的具体实现,只向客户端提供一个统一的接口来创建对象。通过将对象的创建逻辑委托给工厂类,客户端可以避免直接实例化对象,从而提高代码的可维护性和灵活性。
适用的场景:
1. 当一个类不知道或不关心它需要创建的对象的类时,可以使用工厂模式,例如,客户端只需要知道抽象产品类接口,而不需要知道具体产品类的实现。
2. 当一个类希望由子类来指定创建对象时,可以使用工厂模式,例如,可以将产品的创建过程移到子类中。
3. 当一个类需要根据运行时的条件创建不同的对象时,可以使用工厂模式。
好处:
1. 工厂模式将对象的创建与使用分离,使得客户端只需要关心对象的使用,而不需要关心对象的创建过程。
2. 工厂模式满足了开放-封闭原则,即对扩展开放,对修改封闭。可以通过添加新的具体产品类来扩展工厂,而不需要修改客户端代码。
3. 工厂模式可以很好地封装创建对象的细节,使得客户端代码更加简洁、可读性更高。
下面是一个使用Java语言实现工厂模式的完整样例代码:
// 抽象产品类
interface Product {
void operation();
}
// 具体产品类A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductA");
}
}
// 具体产品类B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductB");
}
}
// 工厂类
class Factory {
public Product createProduct(String productType) {
if (productType.equals("A")) {
return new ConcreteProductA();
} else if (productType.equals("B")) {
return new ConcreteProductB();
} else {
throw new IllegalArgumentException("Invalid product type");
}
}
}
// 客户端
class Client {
public static void main(String[] args) {
Factory factory = new Factory();
Product productA = factory.createProduct("A");
productA.operation();
Product productB = factory.createProduct("B");
productB.operation();
}
}
在上述代码中,`Product`表示抽象产品类,`ConcreteProductA`和`ConcreteProductB`表示具体产品类,`Factory`表示工厂类。`Factory`类中的`createProduct`方法根据传入的产品类型来创建相应的具体产品对象。
在客户端代码中,通过工厂类的`createProduct`方法来创建具体产品对象,并调用其`operation`方法。根据传入的产品类型,工厂类返回对应的具体产品对象。输出结果为:
ConcreteProductA
ConcreteProductB