怎么实现抽象工厂设计模式
时间: 2023-05-29 12:06:50 浏览: 107
抽象工厂设计模式是一种创建型设计模式,它提供了一种创建一系列相关对象的方法,而无需指定其具体类。下面是实现抽象工厂设计模式的步骤:
1. 定义一个抽象工厂接口,该接口定义了一组方法用于创建相关对象。
2. 定义一组具体工厂类,每个具体工厂类都实现了抽象工厂接口,并提供了一组具体的创建方法,用于创建相关对象。
3. 定义一组抽象产品接口,该接口定义了一组方法用于操作产品。
4. 定义一组具体产品类,每个具体产品类都实现了抽象产品接口,并提供了具体的操作方法。
5. 在客户端代码中,创建一个具体工厂对象,并使用该对象的方法来创建相关的产品对象。
下面是一个简单的抽象工厂模式的示例代码:
```java
// 抽象工厂接口
interface AbstractFactory {
public AbstractProductA createProductA();
public AbstractProductB createProductB();
}
// 具体工厂类1
class ConcreteFactory1 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ConcreteProductA1();
}
public AbstractProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂类2
class ConcreteFactory2 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ConcreteProductA2();
}
public AbstractProductB createProductB() {
return new ConcreteProductB2();
}
}
// 抽象产品A接口
interface AbstractProductA {
public void operationA();
}
// 具体产品A1类
class ConcreteProductA1 implements AbstractProductA {
public void operationA() {
System.out.println("ConcreteProductA1 operationA");
}
}
// 具体产品A2类
class ConcreteProductA2 implements AbstractProductA {
public void operationA() {
System.out.println("ConcreteProductA2 operationA");
}
}
// 抽象产品B接口
interface AbstractProductB {
public void operationB();
}
// 具体产品B1类
class ConcreteProductB1 implements AbstractProductB {
public void operationB() {
System.out.println("ConcreteProductB1 operationB");
}
}
// 具体产品B2类
class ConcreteProductB2 implements AbstractProductB {
public void operationB() {
System.out.println("ConcreteProductB2 operationB");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactory1();
AbstractProductA productA1 = factory1.createProductA();
AbstractProductB productB1 = factory1.createProductB();
productA1.operationA();
productB1.operationB();
AbstractFactory factory2 = new ConcreteFactory2();
AbstractProductA productA2 = factory2.createProductA();
AbstractProductB productB2 = factory2.createProductB();
productA2.operationA();
productB2.operationB();
}
}
```
在上面的示例代码中,抽象工厂接口 `AbstractFactory` 定义了一组方法 `createProductA()` 和 `createProductB()`,用于创建相关产品对象。具体工厂类 `ConcreteFactory1` 和 `ConcreteFactory2` 实现了该接口,并提供了具体的创建方法。抽象产品接口 `AbstractProductA` 和 `AbstractProductB` 定义了一组方法用于操作产品,具体产品类 `ConcreteProductA1`、`ConcreteProductA2`、`ConcreteProductB1` 和 `ConcreteProductB2` 实现了这两个接口,并提供了具体的操作方法。在客户端代码中,创建了两个不同的具体工厂对象,并使用这些对象的方法来创建相关的产品对象。
阅读全文