【编码魔法师系列_构建型1.2 】工厂方法模式(Factory Method)

本文以造车厂为例介绍工厂方法模式,目的是将顾客和汽车解耦,解决车多种配置问题。其适用于产品有大量继承体系且后期有扩展需求的场景,但会增加系统复杂度。还提及该模式在日志记录、数据库访问等框架中的应用,并给出相关代码和测试。

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

👉直达编码魔法师系列其他文章👈

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。

实例

一家SUV造车厂,一家小轿车造车厂,且小轿车会根据“厢”划分不同车型,故作如下设计:

目的

将买车顾客和汽车解耦,工厂类承担构建所有对象的职责,顾客只需要说出车型,让工厂生产出来即可。并且解决某种车会有多种配置的情况,若是使用前面的“简单工厂模式”我们就需要在汇总的工厂类中加入分支语句,随着各类车增加车型会使汇总工厂类变得越来越大。「说白了再创建一个工厂,用来创建工厂类对象」

适用场景

产品有大量的继承体系并且后期会有大量的扩展需求

弊端

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度。

类图:

在这里插入图片描述

框架用到的地方:

日志记录、数据库访问等

Coding

Car接口:

public interface Car {
    void creat();
}

SmallCar:

public class SmallCar implements Car {

    public SmallCar(Integer box) {
        this.creat(box);
    }

    public SmallCar() {
        this.creat();
    }

    @Override
    public void creat() {
        System.out.println("造一辆标配小轿车");
    }

    public void creat(Integer box) {
        System.out.println("造一辆" + box + "厢小轿车");
    }
}

SUV:

public class SUV implements Car{
    @Override
    public void creat() {
        System.out.println("造一辆SUV");
    }
}

SmallCarFactory:

public class SmallCarFactory {
    public Car creatCar(Integer box) {
        if (box != null) {
            return new SmallCar(box);
        }
        return new SmallCar();
    }
}

SUVCarFactory:

public class SUVCarFactory {
    public Car creatCar(){
        return new SUV();
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        SmallCarFactory smallCarFactory = new SmallCarFactory();
        Car car = smallCarFactory.creatCar(null);
        System.out.println(car);
    }
}

测试结果:

造一辆标配小轿车
👉直达编码魔法师系列其他文章👈

文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进阶的小名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值