在 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();