java抽象工厂模式

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种提供接口,用于创建一系列相关或互相依赖对象的工厂模式。抽象工厂模式隐藏了工厂类创建产品的实现,客户端只需通过工厂接口即可创建一系列产品。

抽象工厂模式通常由一个抽象工厂类和多个具体工厂类实现,每个具体工厂类可以创建一系列相关的产品。每个工厂类都有一个对应的产品族,工厂类创建的产品属于同一个产品族。

优点

  • 抽象工厂模式将具体产品类的名称从客户端代码中分离出来,使得代码更加松耦合。
  • 抽象工厂模式可以在一定程度上提高代码的复用性,例如,多个具体工厂类可以共享同一个抽象工厂类。
  • 抽象工厂模式可以在运行时动态更换具体工厂类,从而改变工厂类创建的产品。

缺点

  • 抽象工厂模式增加了系统的抽象性和理解难度。
  • 在需要增加新的产品族时,需要修改抽象工厂类和所有具体工厂类,不符合“开闭原则”。
  • 当产品族中只需增加一个新的产品时,抽象工厂模式需要修改所有的抽象产品类和所有具体产品类。

代码讲解

假设我们需要创建一个由汽车和轮胎组成的产品族。其中汽车分为SUV和轿车两种类型,轮胎分为普通轮胎和越野轮胎两种类型。我们可以使用抽象工厂模式来创建这个产品族。

抽象产品类

public abstract class Car {
    public abstract void run();
}

public abstract class Tyre {
    public abstract void show();
}

具体产品类

public class SuvCar extends Car {
    @Override
    public void run() {
        System.out.println("SUV run");
    }
}

public class SedanCar extends Car {
    @Override
    public void run() {
        System.out.println("Sedan car run");
    }
}

public class NormalTyre extends Tyre {
    @Override
    public void show() {
        System.out.println("Normal tyre show");
    }
}

public class OffroadTyre extends Tyre {
    @Override
    public void show() {
        System.out.println("Offroad tyre show");
    }
}

抽象工厂类

public abstract class AbstractFactory {
    public abstract Car createCar();
    public abstract Tyre createTyre();
}

具体工厂类

public class SuvFactory extends AbstractFactory {
    @Override
    public Car createCar() {
        return new SuvCar();
    }
    @Override
    public Tyre createTyre() {
        return new OffroadTyre();
    }
}

public class SedanFactory extends AbstractFactory {
    @Override
    public Car createCar() {
        return new SedanCar();
    }
    @Override
    public Tyre createTyre() {
        return new NormalTyre();
    }
}

测试代码

public class AbstractFactoryDemo {
    public static void main(String[] args) {
        AbstractFactory suvFactory = new SuvFactory();
        Car suvCar = suvFactory.createCar();
        Tyre suvTyre = suvFactory.createTyre();
        suvCar.run();
        suvTyre.show();

        AbstractFactory sedanFactory = new SedanFactory();
        Car sedanCar = sedanFactory.createCar();
        Tyre sedanTyre = sedanFactory.createTyre();
        sedanCar.run();
        sedanTyre.show();
    }
}

结果输出

SUV run
Offroad tyre show
Sedan car run
Normal tyre show

从输出结果可以看出,使用抽象工厂模式创建了具体的产品,并能够动态地实现产品族的创建和替换。

抽象工厂模式缺点

  1. 扩展困难:如果需要增加一种产品族,就需要修改抽象工厂接口、所有实现工厂和所有产品的接口实现。

  2. 代码复杂性:引入了更多的抽象概念,增加了代码的复杂性。

  3. 不易理解:因为抽象工厂模式要求创建一组相关的对象,所以需要理解这些对象之间的关系。

  4. 不灵活:因为抽象工厂模式是在编译时确定的,所以不能动态地添加或删除产品族。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值