抽象工厂模式Demo
时间: 2023-06-22 21:12:19 浏览: 55
好的,这里是一个简单的抽象工厂模式的示例:
```java
// 抽象产品A
interface ProductA {
void methodA();
}
// 抽象产品B
interface ProductB {
void methodB();
}
// 具体产品A1
class ConcreteProductA1 implements ProductA {
@Override
public void methodA() {
System.out.println("具体产品A1的方法A");
}
}
// 具体产品A2
class ConcreteProductA2 implements ProductA {
@Override
public void methodA() {
System.out.println("具体产品A2的方法A");
}
}
// 具体产品B1
class ConcreteProductB1 implements ProductB {
@Override
public void methodB() {
System.out.println("具体产品B1的方法B");
}
}
// 具体产品B2
class ConcreteProductB2 implements ProductB {
@Override
public void methodB() {
System.out.println("具体产品B2的方法B");
}
}
// 抽象工厂
interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂2
class ConcreteFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建工厂1
AbstractFactory factory1 = new ConcreteFactory1();
// 创建产品A1
ProductA productA1 = factory1.createProductA();
// 创建产品B1
ProductB productB1 = factory1.createProductB();
// 调用产品A1的方法A
productA1.methodA();
// 调用产品B1的方法B
productB1.methodB();
// 创建工厂2
AbstractFactory factory2 = new ConcreteFactory2();
// 创建产品A2
ProductA productA2 = factory2.createProductA();
// 创建产品B2
ProductB productB2 = factory2.createProductB();
// 调用产品A2的方法A
productA2.methodA();
// 调用产品B2的方法B
productB2.methodB();
}
}
```
这个示例中,抽象产品A和B表示两个不同的产品族,具体产品A1和A2表示A产品族的两个具体产品,具体产品B1和B2表示B产品族的两个具体产品。抽象工厂接口定义了两个工厂方法,用于创建A和B产品族的产品。具体工厂1和2分别实现了抽象工厂接口,用于创建A和B产品族的具体产品。客户端通过具体工厂1或者2来创建A和B产品族的具体产品,实现了产品族的解耦。