工厂方法模式

本文深入探讨了工厂方法模式,介绍了其作为简单工厂模式的升级,如何通过抽象工厂降低耦合并遵循开放-封闭原则。文章列举了汽车品牌的案例,展示了如何创建抽象产品类和工厂类,并通过具体工厂实例化产品。同时,通过分析Java中ArrayList的iterator实现,进一步阐述了该模式的实际运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 工厂方法模式

1.1 介绍

上面提到的简单工厂模式为每种对象创建一个工厂,通过传入参数实现生产,但实际上这在一定程度上还存在调度和被调用之间的耦合,而工厂方法模式将工厂抽象化,通过在生产工厂类时就指定创建的对象,进一步降低了耦合,形成工厂—产品一一对应的模式,因此满足了“开放-封闭”原则。

1.2 优缺点

优点

  • 抽象工厂类通过其子类来指定创建哪个对象,在简单工厂的基础上进一步降低了耦合,并满足了开放—封闭原则

缺点

  • 由于生产一种产品就要创建一个工厂类,比较复杂。

1.3 适用场景

1.4 注意事项

2. 案例实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lv27d6P3-1630411544923)(…/…/images/设计模式工厂方法模式.PNG)]

abstract class Car {
    abstract String getName();
}

class Audi extends Car {

    @Override
    String getName() {
        return "奥迪";
    }
}

class BMW extends Car {

    @Override
    String getName() {
        return "宝马";
    }
}

abstract class CarFactory {
    abstract Car getCar();
}

public class AudiFactory extends CarFactory {

    @Override
    Car getCar() {
        return new Audi();
    }
}

public class BMWFactory extends CarFactory {
    @Override
    Car getCar() {
        return new BMW();
    }
}

/**
 * 工厂方法模式
 * 继承抽象工厂来实现产品工厂,一个工厂可以生产一种产品
 * 
 * @Author cly
 * @Date 2021/08/31 0:22
 * @Version 1.0
 */
public class FactoryMethod {
    public static void main(String[] args) {
        Car car = new BMWFactory().getCar();
        System.out.println(car.getName());
    }
}

3. 源码实现

3.1 Java中ArrayList中的iterator

其中Iterator是抽象产品,itr是具体产品,collection是抽象工厂,ArrayList是具体产品。

public Iterator<E> iterator() {
    return new Itr();
}

private class Itr implements Iterator<E> {
    int cursor;       // index of next element to return
    int lastRet = -1; // index of last element returned; -1 if no such
    int expectedModCount = modCount;
    //...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值