工厂模式---简单工厂、工厂方法代码讲解

本文介绍了工厂模式的基本概念,强调了它将对象的创建与使用分离。详细阐述了简单工厂和工厂方法两种实现方式,并通过汽车类比解释了这两种模式的工作原理。在简单工厂模式中,添加新类型需要修改原有代码,违背了开闭原则。而工厂方法模式通过创建独立的工厂类解决了这个问题,实现了对拓展开放,对修改关闭的原则。

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

一、工厂模式概述

工厂模式:将各种对象的创建过程单独提取出来,交给工厂类负责创建管理。谁想要什么产品,直接找工厂要使用的对象。实现创建者和调用者分离。

例如:我们要买一台车,在代码里的实现是new创建,这就相当于我们自己造车了,而工厂模式思想是你要什么车告诉我,我给你车,不要自己造车。

二、工厂模式的三种类型

工厂模式主要有三种类型:简单工厂、工厂方法,抽象方法。

三、简单工厂代码实现

 大家可以先了解下体系然后看代码,然后再回来看体系。

1.Car接口

public interface Car {
    //汽车名字
    void name();
}

2.奥迪汽车类

public class Audi implements Car{
    @Override
    public void name() {
        System.out.println("奥迪四个圈");
    }
}

3.奔驰汽车类

public class Benz implements Car {
    @Override
    public void name() {
        System.out.println("奔驰");
    }
}

4.汽车工厂类(即创建者)


public class CarFactory {

    public static Car getCar(String car){
        
        //此处选择Switch语句。也可以使用if判断语句。
        switch (car){

            case "benz":
                return new Benz();
            case "audi":
                return new Audi();

                default:
                    return null;
        }
    }
}

5.测试类(即调用者)

大家观察以下代码发现我们并不需要去创建对象,需要哪个对象我们直接从工厂里去拿就可以了。

public class MyTest {
    public static void main(String[] args) {
        Car audi = CarFactory.getCar("audi");
        audi.name();
    }
}

思考题:如果我们在加一种车Volvo沃尔沃,那么我们需要创建Volvo实现接口,重写方法,这些是必须写的,最重要的还要在车工厂添加条件语句判断创建对象,这样我们就违背了开闭原则,对拓展开放,对修改关闭。

所以我们来了解下面一种方法:工厂方法。这个比较费事。

四、工厂方法代码实现

优化简单工厂代码,就是上面的代码。

1.创建汽车总制造工厂接口,大家这么理解。后面为每个汽车再创建单个汽车工厂。

public interface CarFactory {

    Car getCar();
}

2.创建奥迪汽车工厂 实现汽车总制造出接口 创建奥迪对象

public class AudiFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Audi();
    }
}

3.创建奔驰汽车类工厂。与上面一样。

4.现在我们要添加Volvo汽车,创建汽车,实现Car接口,然后创建Volvo工厂,实现总制造厂接口。

5.测试类


public class MyTest {
    public static void main(String[] args) {
        //比如我们要奥迪汽车,直接去找奥迪工厂即可
        Car audi = new AudiFactory().getCar();
        audi.name();
    }
}

现在我们多次工厂多一个产品,我们不需要去修改源代码,只需要增加工厂类即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值