抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
下面是一个简单的Java版抽象工厂模式示例:
// 抽象工厂接口
interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA1();
}
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂2
class ConcreteFactory2 implements AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA2();
}
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
// 抽象产品A
interface ProductA {
void operationA();
}
// 具体产品A1
class ConcreteProductA1 implements ProductA {
public void operationA() {
System.out.println("ConcreteProductA1 operationA");
}
}
// 具体产品A2
class ConcreteProductA2 implements ProductA {
public void operationA() {
System.out.println("ConcreteProductA2 operationA");
}
}
// 抽象产品B
interface ProductB {
void operationB();
}
// 具体产品B1
class ConcreteProductB1 implements ProductB {
public void operationB() {
System.out.println("ConcreteProductB1 operationB");
}
}
// 具体产品B2
class ConcreteProductB2 implements ProductB {
public void operationB() {
System.out.println("ConcreteProductB2 operationB");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactory1();
ProductA productA1 = factory1.createProductA();
ProductB productB1 = factory1.createProductB();
productA1.operationA();
productB1.operationB();
AbstractFactory factory2 = new ConcreteFactory2();
ProductA productA2 = factory2.createProductA();
ProductB productB2 = factory2.createProductB();
productA2.operationA();
productB2.operationB();
}
}在这个示例中,我们定义了一个抽象工厂接口AbstractFactory,它包含了两个创建产品的方法createProductA()和createProductB()。然后我们定义了两个具体工厂ConcreteFactory1和ConcreteFactory2,它们分别实现了AbstractFactory接口,并实现了自己的产品创建方法。
接着,我们定义了两个抽象产品ProductA和ProductB,它们分别包含了自己的操作方法。然后我们定义了四个具体产品ConcreteProductA1、ConcreteProductA2、ConcreteProductB1和ConcreteProductB2,它们分别实现了ProductA和ProductB接口,并实现了自己的操作方法。
最后,我们在客户端代码中使用具体工厂来创建具体产品,并调用它们的操作方法。
这个示例展示了如何使用抽象工厂模式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。