栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式-工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-工厂模式

文章目录
    • 1.描述
    • 2.代码实现

1.描述

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

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

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

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

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

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

2.代码实现

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

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

public interface ToolCar {
    
    void run();
}

接着定义我们的产品

坦克

public class Tank implements ToolCar {
    
    @Override
    public void run() {
        System.out.println("tank running");
    }
}

拖拉机

public class Tractor implements ToolCar {
    
    @Override
    public void run() {
        System.out.println("tractor running");
    }
}

货车

public class Truck implements ToolCar{
    
    @Override
    public void run() {
        System.out.println("truck running");
    }
}

定义我们的工厂

public class ToolCarFactory {
    
    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;
    }
}

测试一下我们工厂

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/854523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号