Java23种设计模式-创建型模式之抽象工厂模式

发布于:2024-04-25 ⋅ 阅读:(18) ⋅ 点赞:(0)

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它用于创建相关相互依赖对象的一组,而无需指定具体的类。这种模式特别适用于产品族的情况,即一组相互关联的产品对象

存在四种角色:
角色1:抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的
角色2:具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的
角色3:抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口
角色4:具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。

优点包括:
1.具体产品在应用层代码隔离,无须关心创建细节。
2.将一个系列的产品族统一到一起创建
主要缺点:
规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口。
增加了系统的抽象性和理解难度。

示例:定义了两个产品接口ProductA和ProductB,以及它们的具体实现ConcreteProductA1和ConcreteProductB1。然后定义了一个工厂接口Factory和一个具体工厂ConcreteFactory,它负责创建产品对象。最后,在客户端代码中,我们通过工厂创建了产品对象并调用它们的方法

//抽象产品A
public interface ProductA {
    void useProductA();
}
// 具体产品A1
public class ConcreteProductA1 implements ProductA{
    @Override
    public void useProductA() {
        System.out.println("使用产品A1");
    }
}
//抽象产品B
interface ProductB {
    void useProductB();
}
//具体产品B1
public class ConcreteProductB1 implements ProductB {
    @Override
    public void useProductB() {
        System.out.println("使用产品B1");
    }
}
// 抽象工厂
public interface Factory {
    ProductA createProductA();
    ProductB createProductB();
}
// 具体工厂
public class ConcreateFactory implements Factory{
    @Override
    public ProductA createProductA() {
        System.out.println("具体产品实例化A1");
        return new ConcreteProductA1();
    }

    @Override
    public ProductB createProductB() {
        System.out.println("具体产品实例化B1");
        return new ConcreteProductB1();
    }
}
// 客户端调用测试
public class Client {
    public static void main(String[] args) {
        //工厂实例化
        Factory factory = new ConcreateFactory();
        //工厂调用
        ProductA productA = factory.createProductA();
        ProductB productB = factory.createProductB();
        
        productA.useProductA();
        productB.useProductB();
    }
}