美文网首页Java 进阶编程语言爱好者Java
设计模式(三)抽象工厂模式

设计模式(三)抽象工厂模式

作者: 我犟不过你 | 来源:发表于2020-12-31 15:05 被阅读0次

1、概述

抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。在实现上,抽象⼯⼚是⼀个中⼼工厂,创建其他⼯厂的模式。

2、适用场景

1)如果有多个相互关联或者相同等级的产品族时,且不明确具体有哪些产品时,出于对代码的扩展考虑,可以使用抽象工厂(比如工厂可以生产汽车和船,但是车和船又分为多种颜色等)。
2)如果有一个抽象类或者接口,它有很多方法做不同的事,基于单一原则,可以考虑将这个抽象类或接口抽象成抽象工厂,方法定义成不同产品族的工厂。

3、实例

业务场景:
一个商店,出售多种货物,包括汽车car,船ship。car和ship都可以运行。
要求每个产品有高配high、低配low两种类型。

分析上面的场景,car和ship可以抽象成不同的产品族,高配与低配则可以抽象成工厂方法的类型工厂。

综上我们需要创建以下的类组成一个抽象工厂:
1)抽象工厂
2)car顶层接口或抽象类,ship的顶层接口或抽象类
3)高配子工厂和低配子工厂
4)具体的产品,高配car,高配ship,低配car,低配ship

工厂

抽象工厂:生产car和ship

/**
 * TODO
 * @date: 2020/12/30
 * @author weirx
 * @version 3.0
 */
public interface AbstractFactory {

    Car getCar();

    Ship getShip();
}

Car和Ship顶层接口:

Car
/**
 * TODO
 * @date: 2020/12/30
 * @author weirx
 * @version 3.0
 */
public interface Car {

    void run();
}
Ship
/**
 * TODO
 * @date: 2020/12/30
 * @author weirx
 * @version 3.0
 */
public interface Ship {

    void run();
}

高配子工厂和低配子工厂

/**
 * TODO
 * @date: 2020/12/30
 * @author weirx
 * @version 3.0
 */
public class HighFactory implements AbstractFactory{
    @Override
    public Car getCar() {
        return new HighCar();
    }

    @Override
    public Ship getShip() {
        return new HighShip();
    }
}
/**
 * TODO
 * @date: 2020/12/30
 * @author weirx
 * @version 3.0
 */
public class LowFactory implements AbstractFactory{
    @Override
    public Car getCar() {
        return new LowCar();
    }

    @Override
    public Ship getShip() {
        return new LowShip();
    }
}

测试类:

/**
 * TODO
 * @date: 2020/12/30
 * @author weirx
 * @version 3.0
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BsspUserApplication.class)
public class TestDemo {

    @Test
    public void test() {
        //获取高配car
        AbstractFactory highFactory = new HighFactory();
        Car car = highFactory.getCar();
        car.run();
        //获取低配car
        LowFactory lowFactory = new LowFactory();
        Car lowCar = lowFactory.getCar();
        lowCar.run();
    }
}

结果:

this high car is running
this low car is running

4、分析

通过抽象工厂方式,当需要增加一种产品规格时,比如增加中配,需要增加中配的实际car
和ship,同时增加中配子工厂,对于高配和低配的产品没有任何影响。

增加产品类型时,比如要增加plane,则需要修改抽象工厂,增加获取plane的方法。还要增加顶级产品接口,以及具体的产品。

当扩展子工厂类别时,对于原代码是无影响的;但是增加产品类别时,需要修改抽象工厂;所以在设计时,要选好范围,减少基类的修改。

5、总结

优点:
1)符合开闭原则。
2)符合单一原则。
3)同一工厂下生产的产品相互匹配。
缺点:
1)类数量增加,增加代码复杂度
2)增加产品基类需要修改抽象工厂

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟)工厂模式分为简单工厂,工厂方法,抽象工厂。 简单工厂模式 一个接口,三...

网友评论

    本文标题:设计模式(三)抽象工厂模式

    本文链接:https://www.haomeiwen.com/subject/nmcqoktx.html