返回
重新认识设计模式:揭开工厂模式与抽象工厂模式的神秘面纱
Android
2023-12-16 11:57:18
在软件开发错综复杂的道路上,设计模式犹如灯塔,指引着开发者在代码海洋中航行。工厂模式和抽象工厂模式便是两颗璀璨的明珠,帮助我们应对创建对象时的重重挑战。
工厂模式:创建对象的接口
工厂模式如同一个熟练的工匠,它定义了一个创建对象的接口,将具体对象的创建过程委托给其子类。这种模式的精髓在于解耦客户端与具体类的耦合,让客户端只需关注创建对象的通用接口,而无需了解具体对象的实现细节。
使用场景
工厂模式在以下场景中大显身手:
- 当需要生成一组相关对象时,工厂模式可提供一个统一的创建接口,简化对象的创建过程。
- 当需要动态创建对象时,工厂模式可根据不同的条件创建不同的实例,实现灵活的创建机制。
- 当需要隔离客户端与具体类的实现细节时,工厂模式可作为一道屏障,保护客户端不受底层变化的影响。
代码实现
interface Product {
void create();
}
class ProductA implements Product {
@Override
public void create() {
System.out.println("Creating ProductA");
}
}
class ProductB implements Product {
@Override
public void create() {
System.out.println("Creating ProductB");
}
}
class Factory {
public Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
} else {
throw new IllegalArgumentException("Invalid product type: " + type);
}
}
}
抽象工厂模式:创建相关对象的家族
抽象工厂模式进一步拓展了工厂模式的理念,它定义了一个用于创建相关对象家族的接口,让子类决定实例化哪个具体工厂,从而生成一组相关的对象。
使用场景
抽象工厂模式在以下场景中备受青睐:
- 当需要创建相关对象家族时,抽象工厂模式可提供一个统一的创建接口,简化对象的创建过程。
- 当需要根据不同平台或框架创建对象时,抽象工厂模式可隔离客户端与具体平台的实现细节,实现跨平台的可移植性。
- 当需要保持对象家族的一致性时,抽象工厂模式可通过强制创建相关对象来确保对象之间的兼容性。
代码实现
interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
class ConcreteFactory1 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ProductA1();
}
@Override
public ProductB createProductB() {
return new ProductB1();
}
}
class ConcreteFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ProductA2();
}
@Override
public ProductB createProductB() {
return new ProductB2();
}
}
总结
工厂模式和抽象工厂模式是设计模式中不可或缺的利器,它们通过解耦对象创建过程,提升代码的灵活性和可重用性。通过合理运用这些模式,我们可以构建更优雅、更健壮的软件系统。