工厂模式是一种创建型设计模式,它提供了一种将对象的创建与使用分离的方法。在工厂模式中,我们通过工厂类来创建对象,而不是直接在客户端代码中使用 new 关键字来创建对象。以下是一个简单的Java工厂模式示例代码:
产品接口
首先,我们定义一个产品接口,表示工厂要创建的对象:
// 产品接口
public interface Product {
void operation();
}
具体产品类
然后,我们定义一些实现产品接口的具体产品类:
// 具体产品类A
public class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("Concrete Product A operation");
}
}
// 具体产品类B
public class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("Concrete Product B operation");
}
}
工厂接口
接着,我们定义一个工厂接口,用于创建产品:
// 工厂接口
public interface Factory {
Product createProduct();
}
具体工厂类
最后,我们定义具体的工厂类来创建产品对象:
// 具体工厂类A,用于创建具体产品类A的实例
public class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂类B,用于创建具体产品类B的实例
public class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
客户端代码
现在,我们可以在客户端代码中使用工厂来创建产品对象,而不需要关心具体的产品类:
public class Client {
public static void main(String[] args) {
// 创建工厂A,并使用它创建具体产品A的实例
Factory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.operation();
// 创建工厂B,并使用它创建具体产品B的实例
Factory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.operation();
}
}
示例说明
- 客户端代码只与工厂接口和产品接口打交道,不直接与具体产品类耦合,从而实现了解耦。
- 如果要添加新的产品,只需创建一个新的具体产品类和一个对应的具体工厂类即可,无需修改现有的代码,符合开闭原则。
- 工厂模式提供了一种灵活的方法来创建对象,可以根据具体的需求选择使用哪个具体工厂来创建产品对象。