在 Java 编程中,设计模式是解决常见问题的有效方案。工厂模式和抽象工厂模式是创建对象的常用设计模式,它们能够提高代码的灵活性、可维护性和可扩展性。
首先,我们来了解一下工厂模式。工厂模式的核心思想是定义一个用于创建对象的接口,让子类决定实例化哪一个类。
例如,我们有一个产品接口 Product:
interface Product {
void doSomething();
}
然后有两个具体的产品类 ConcreteProductA 和 ConcreteProductB 实现了这个接口:
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("ConcreteProductA is doing something");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("ConcreteProductB is doing something");
}
}
接下来是工厂类 Factory:
class Factory {
public Product createProduct(String type) {
if ("A".equalsIgnoreCase(type)) {
return new ConcreteProductA();
} else if ("B".equalsIgnoreCase(type)) {
return new ConcreteProductB();
}
return null;
}
}
在使用时:
Factory factory = new Factory();
Product productA = factory.createProduct("A");
productA.doSomething();
接下来看抽象工厂模式。抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
假设我们有另一个产品族,包括 Product1 和 Product2 接口,以及它们的具体实现类 ConcreteProduct1A、ConcreteProduct1B、ConcreteProduct2A 和 ConcreteProduct2B。
抽象工厂类 AbstractFactory:
interface AbstractFactory {
Product1 createProduct1();
Product2 createProduct2();
}
具体工厂类 ConcreteFactoryA 和 ConcreteFactoryB 实现了这个接口:
```java
class ConcreteFactoryA implements AbstractFactory {
@Override
public Product1 createProduct1() {
return new ConcreteProduct1A();
}
@Override
public Product2 createProduct2() {
return new ConcreteProduct2A();
}
}
class ConcreteFactoryB implements AbstractFactory {
@Override
public Product1 createProduct1() {
return new ConcreteProduct1B();