设计模式-工厂模式

本文详细介绍了工厂模式,一种创建型设计模式,用于在父类中定义创建对象的方式,由子类决定实例化何种类型。通过一个具体的工具车工厂示例,展示了如何在不同场景下创建坦克、拖拉机和货车。工厂模式的主要优点是屏蔽对象创建细节,方便扩展,但可能带来类型硬编码和复杂性增加的问题。在实际应用中,如Spring的BeanFactory和日志框架LogFactory都采用了此模式。
摘要由CSDN通过智能技术生成

文章目录

1.描述

工厂模式、Factory Pattern。是创建型设计模式的一种,在父类提供一个创建对象的方法,子类决定实例化对象的类型。

主要解决:接口选择的问题。

使用场景:明确地知道什么情况下创建什么样的实例。

举个栗子:Spring的BeanFactory、众多日志框架的LogFactory

优点:1.屏蔽了创建对象的细节,只需要用工厂类和类型就可以获取实例;2.方便扩展,在工厂类加类型就可以。

缺点:1.类型硬编码,没那么灵活,一定程度上增加了复杂性;2.增加产品过多,工厂类可能会比较臃肿。

源码在文末

2.代码实现

我们有一个工厂,可以生产工具车。工具车包括坦克、拖拉机、货车。在不同情况下,我们需要不同的工具车。

我们先定义一下我们的工具车

/**
 * 工具车接口
 *
 * @author 编程还未
 */
public interface ToolCar {
    /**
     * 跑起来
     */
    void run();
}

接着定义我们的产品

坦克

/**
 * 坦克
 *
 * @author 编程还未
 */
public class Tank implements ToolCar {
    /**
     * 跑起来
     */
    @Override
    public void run() {
        System.out.println("tank running");
    }
}

拖拉机

/**
 * 拖拉机
 *
 * @author 编程还未
 */
public class Tractor implements ToolCar {
    /**
     * 跑起来
     */
    @Override
    public void run() {
        System.out.println("tractor running");
    }
}

货车

/**
 * 货车
 * @author 编程还未
 */
public class Truck implements ToolCar{
    /**
     * 跑起来
     */
    @Override
    public void run() {
        System.out.println("truck running");
    }
}

定义我们的工厂

/**
 * 工具车工厂
 * <p>
 * 可以生产:坦克、拖拉机、货车
 *
 * @author 编程还未
 */
public class ToolCarFactory {
    /**
     * 生产工具车
     *
     * @param type 可以生产的类型
     * @return 工具车
     */
    public static ToolCar getToolCar(Type type) {
        if (Type.TANK.equals(type)) {
            return new Tank();
        } else if (Type.TRACTOR.equals(type)) {
            return new Tractor();
        } else if (Type.TRUCK.equals(type)) {
            return new Truck();
        }
        //未知的类型返回null
        return null;
    }
    /**
     * 可以生产的类型
     */
    enum Type {
        /**
         * 坦克
         */
        TANK,
        /**
         * 拖拉机
         */
        TRACTOR,
        /**
         * 货车
         */
        TRUCK;
    }
}

测试一下我们工厂

/**
 * 测试工厂
 *
 * @author 编程还未
 */
public class TestFactory {

    public static void main(String[] args) {
        //现在有情况,需要几辆坦克
        ToolCar toolCar1=ToolCarFactory.getToolCar(ToolCarFactory.Type.TANK);
        toolCar1.run();

        //和平安定,需要拖拉机生产
        ToolCar toolCar2=ToolCarFactory.getToolCar(ToolCarFactory.Type.TRACTOR);
        toolCar2.run();

        //大丰收,需要货车运送货物
        ToolCar toolCar3=ToolCarFactory.getToolCar(ToolCarFactory.Type.TRUCK);
        toolCar3.run();
    }
}

运行结果如下

tank running
tractor running
truck running

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程还未

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

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

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

打赏作者

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

抵扣说明:

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

余额充值