📅  最后修改于: 2023-12-03 15:25:51.732000             🧑  作者: Mango
抽象工厂模式是一种通过对具体工厂的抽象使其能够创建一族产品的方法。抽象工厂模式与工厂方法模式的区别在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
提供一个接口,使得该接口可以创建一系列具有相同共性的对象。
下面是一个抽象工厂模式的示例代码:
// 抽象产品A
interface AbstractProductA {
void show();
}
// 抽象产品B
interface AbstractProductB {
void show();
}
// 具体产品A1
class ConcreteProductA1 implements AbstractProductA {
@Override
public void show() {
System.out.println("具体产品A1");
}
}
// 具体产品A2
class ConcreteProductA2 implements AbstractProductA {
@Override
public void show() {
System.out.println("具体产品A2");
}
}
// 具体产品B1
class ConcreteProductB1 implements AbstractProductB {
@Override
public void show() {
System.out.println("具体产品B1");
}
}
// 具体产品B2
class ConcreteProductB2 implements AbstractProductB {
@Override
public void show() {
System.out.println("具体产品B2");
}
}
// 抽象工厂
interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂2
class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactory1();
factory1.createProductA().show();
factory1.createProductB().show();
AbstractFactory factory2 = new ConcreteFactory2();
factory2.createProductA().show();
factory2.createProductB().show();
}
}