设计模式-工厂模式

设计模式-工厂模式,第1张

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

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");
    }
}

定义我们的工厂

/**
 * 工具车工程
 * 

* 可以生产:坦克、拖拉机、货车 * * @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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/794122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存