内容纲要
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一组相关或互相依赖的对象的方式,而无需指定它们具体的类。抽象工厂模式允许我们创建对象的组合,这些对象共同实现一个共同的目标或遵循一定的设计规范。
以下是一个简单的Java实现:
- 首先,我们创建两个产品接口:
public interface ProductA {
void showProductAInfo();
}
public interface ProductB {
void showProductBInfo();
}
- 创建具体的产品类实现这些产品接口:
public class ConcreteProductA1 implements ProductA {
@Override
public void showProductAInfo() {
System.out.println("This is ConcreteProductA1");
}
}
public class ConcreteProductA2 implements ProductA {
@Override
public void showProductAInfo() {
System.out.println("This is ConcreteProductA2");
}
}
public class ConcreteProductB1 implements ProductB {
@Override
public void showProductBInfo() {
System.out.println("This is ConcreteProductB1");
}
}
public class ConcreteProductB2 implements ProductB {
@Override
public void showProductBInfo() {
System.out.println("This is ConcreteProductB2");
}
}
- 创建一个抽象工厂接口,定义创建产品的方法:
public interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
- 创建具体的工厂类实现抽象工厂接口,分别用于创建不同的产品组合:
public class ConcreteFactory1 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
- 使用抽象工厂模式创建对象:
public class Main {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactory1();
ProductA productA1 = factory1.createProductA();
ProductB productB1 = factory1.createProductB();
productA1.showProductAInfo();
productB1.showProductBInfo();
AbstractFactory factory2 = new ConcreteFactory2();
ProductA productA2 = factory2.createProductA();
ProductB productB2 = factory2.createProductB();
productA2.showProductAInfo();
productB2.showProductBInfo();
}
}
运行上述代码,你将看到:
This is ConcreteProductA1
This is ConcreteProductB1
This is ConcreteProductA2
This is ConcreteProductB2
抽象工厂模式提供了一种创建一组相关对象的方法,它将对象的创建过程封装起来,使得客户端不需要知道具体的实现细节。当需要添加新的产品族时,只需要实现一个新的具体工厂类,并实现相应的产品接口即可,这样可以避免修改现有的代码,提高代码的可扩展性和可维护性。同时,抽象工厂模式可以保证应用程序的松耦合,使得应用程序只依赖于抽象接口,而不依赖于具体实现。