创建者模式-抽象工厂模式

定义:

抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义如下: Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。)

抽象工厂模式通用类图

抽象工厂设计模式(Abstract Factory Pattern)提供一个创建一系列相关或相互依赖对象的接口,无需指定具体类,即可生成属于同一产品族的对象组合。

角色:

工厂方法模式包含以下几个核心角色:

1、抽象工厂(Abstract Factory):声明创建各产品类型的抽象方法(如createButton()、createTextField()),规范产品族的创建接口。​

2、具体工厂(Concrete Factory):实现抽象工厂接口,负责创建某一具体产品族的所有产品。​​

3、抽象产品(Abstract Product):声明产品的通用接口,规范产品的行为。

4、具体产品(Concrete Product):实现抽象产品接口,代表具体产品族中的实际产品。​

代码示例:

下面我们通过一个简单的示例来演示抽象工厂模式的实现。假设我们有比亚迪和红旗两种车型品牌,每一种品牌都包含了BUS和SUV车。

// 抽象产品类
public interface ISUVCar {
    void produce();
}

// 抽象产品类
public interface IBUSCar {
    void produce();
}

// 具体产品
public class BYDSUVCar implements ISUVCar {
    @Override
    public void produce() {
        System.out.println("我是比亚迪生产的SUV!");
    }
}



// 具体产品
public class BYDBUSCar implements IBUSCar {
    @Override
    public void produce() {
        System.out.println("我是比亚迪生产的BUS!");
    }
}

// 具体产品
public class HongqiSUVCar implements ISUVCar {
    @Override
    public void produce() {
        System.out.println("我是红旗生产的SUV!");
    }
}

// 具体产品
public class HongqiBUSCar implements IBUSCar {
    @Override
    public void produce() {
        System.out.println("我是红旗生产的BUS!");
    }
}

// 抽象工厂类
public interface Factory {

    ISUVCar createSUV();
    IBUSCar createBUS();
}

// 具体工长类
public class BYDFactory implements Factory {

    @Override
    public ISUVCar createSUV() {
        return new BYDSUVCar();
    }

    @Override
    public IBUSCar createBUS() {
        return new BYDBUSCar();
    }
}

// 具体工长类
public class HongqiFactory implements Factory {

    @Override
    public ISUVCar createSUV() {
        return new HongqiSUVCar();
    }

    @Override
    public IBUSCar createBUS() {
        return new HongqiBUSCar();
    }
}

// 使用示例
public class Client {
    public static void main(String[] args) {
        Factory bydFactory = new BYDFactory();
        bydFactory.createSUV().produce();
        bydFactory.createBUS().produce();


        Factory hongqiFactory = new HongqiFactory();
        hongqiFactory.createSUV().produce();
        hongqiFactory.createBUS().produce();
    }
}

优点 :

高内聚性:将同一产品族的对象创建逻辑封装在同一个工厂类中,便于维护和管理。​

低耦合性:客户端依赖抽象接口而非具体类,更换产品族时只需替换工厂实例,符合开闭原则。​

产品族一致性:确保创建的对象属于同一族,避免不兼容的产品组合。​
缺点:

扩展产品类型困难:新增产品类型(如在 UI 框架中新增 “下拉框” 组件)时,需修改抽象工厂接口及所有具体工厂类,违背开闭原则。​

类数量膨胀:每个产品族对应一个具体工厂,当产品族较多时,会导致类数量激增。​

过度设计风险:若产品族仅有一个,使用抽象工厂模式可能增加不必要的复杂度。
使用场景: 

(一)需要创建产品家族​

当系统需要创建的对象属于多个相关产品族(如不同操作系统的 UI 组件、不同品牌的汽车部件),且产品族内的对象需要配套使用时。​

(二)系统不依赖具体产品实现​

客户端只需通过抽象接口操作产品,无需知道具体实现类,降低与具体产品的耦合。​

(三)限制产品组合的变化​

确保同一产品族的对象被协同创建,避免不同族产品混合使用导致的兼容性问题。

抽象工厂设计模式通过 “产品家族” 的概念,为创建一组相关对象提供了结构化的解决方案。它通过抽象接口解耦客户端与具体实现,确保同一族产品的一致性,尤其适合跨平台开发、组件化架构等场景。然而,其对产品类型扩展的限制也要求我们在使用时谨慎评估需求,避免过度设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值