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

抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。

产品族和产品等级是抽象工厂模式中的两个重要概念,它们描述了产品之间的关系。
产品族(Product Family):产品族指的是一组相关的、相互依赖的产品集合。这些产品可能是相互关联的,用于完成特定的任务或在特定的环境下工作。比如,在汽车工厂中,不同品牌(奥迪、宝马)的汽车零部件(发动机、轮胎)组成了不同的产品族。这些产品族共享某些相似性,比如它们都是用于组装汽车的零部件。

产品等级(Product Level):产品等级指的是一个产品族中的产品集合。这些产品在某种程度上是相互独立的,但它们又共享一些公共特征。在汽车工厂的例子中,发动机和轮胎属于不同的产品等级,因为它们虽然在不同的系统中工作,但都是汽车的组成部分。
在这里插入图片描述举例来说,一个汽车工厂的例子。假设我们有不同品牌的汽车(比如奥迪和宝马),每个品牌有自己的发动机和轮胎。
首先,我们定义抽象产品类,包括发动机和轮胎:

// 抽象发动机类
interface Engine {
    void design();
}

// 抽象轮胎类
interface Tire {
    void manufacture();
}

然后,我们定义具体的发动机和轮胎类:

// 具体奥迪发动机类
class AudiEngine implements Engine {
    @Override
    public void design() {
        System.out.println("Designing Audi Engine");
    }
}

// 具体奥迪轮胎类
class AudiTire implements Tire {
    @Override
    public void manufacture() {
        System.out.println("Manufacturing Audi Tire");
    }
}

// 具体宝马发动机类
class BMWEngine implements Engine {
    @Override
    public void design() {
        System.out.println("Designing BMW Engine");
    }
}

// 具体宝马轮胎类
class BMWTire implements Tire {
    @Override
    public void manufacture() {
        System.out.println("Manufacturing BMW Tire");
    }
}

接着,定义抽象工厂接口和具体的工厂类:

// 抽象汽车工厂接口
interface CarFactory {
    Engine createEngine();
    Tire createTire();
}

// 具体奥迪汽车工厂
class AudiFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new AudiEngine();
    }

    @Override
    public Tire createTire() {
        return new AudiTire();
    }
}

// 具体宝马汽车工厂
class BMWFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new BMWEngine();
    }

    @Override
    public Tire createTire() {
        return new BMWTire();
    }
}

最后,在主程序中使用抽象工厂来创建不同品牌汽车的零部件:

public class Main {
    public static void main(String[] args) {
        // 创建奥迪汽车工厂
        CarFactory audiFactory = new AudiFactory();
        Engine audiEngine = audiFactory.createEngine();
        Tire audiTire = audiFactory.createTire();
        
        // 创建宝马汽车工厂
        CarFactory bmwFactory = new BMWFactory();
        Engine bmwEngine = bmwFactory.createEngine();
        Tire bmwTire = bmwFactory.createTire();
        
        // 使用零部件
        audiEngine.design();
        audiTire.manufacture();
        
        bmwEngine.design();
        bmwTire.manufacture();
    }
}

以上展示了如何使用抽象工厂模式创建不同品牌汽车的零部件,其中每个工厂负责生产属于自己品牌的发动机和轮胎。

优点:

  • 一致性:你可以确保同一工厂生成的产品相互匹配。

  • 易于替换产品系列:如果需要更换产品族,只需切换具体工厂即可。这种灵活性使得系统更容易扩展和维护。

  • 符合单一职责原则:每个具体工厂类负责创建一种产品,符合类的职责单一性原则。

  • 遵循开闭原则:抽象工厂模式符合开闭原则,可以轻松地添加新产品族,而无需修改现有代码。

缺点:

  • 复杂性增加:随着产品族和产品等级的增加,抽象工厂模式可能变得更加复杂。这可能导致类的数量增加,使得系统更难以理解和维护。

适用场景:
如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值