设计模式之3 简单工厂模式

简单工厂模式

工厂方法模式有很多扩展,而且与其他模式结合使用威力更大,以下是“简单工厂模式”。

uml类图

这里写图片描述

场景

一个模块仅需要一个工厂类,没有必要把他产生出来,使用静态的方法就可以。

实现

  1. 产品接口及具体产品类不变

  2. 删除抽象工厂类

  3. 修改具体工厂类,将实例化的方法修改成静态的,简化实例化过程

MachineFactory.java

/**
 * @author heshiyuan
 * @description <p></p>
 * @path java-design-pattern/com.hsy.java.design.pattern.method
 * @date 2018/1/30 16:01
 * @github http://github.com/shiyuan2he
 * @email shiyuan4work@sina.com
 * Copyright (c) 2018 shiyuan4work@sina.com All rights reserved.
 * @price ¥5    微信:hewei1109
 */
public class MachineFactory{
    public static <T extends Machine> T createMachine(Class<T> c) {
        Machine machine = null ;
        try {
            machine = (Machine) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) machine;
    }
}

测试

ClientTest.java

/**
 * @author heshiyuan
 * @description <p></p>
 * @path java-design-pattern/com.hsy.java.design.pattern.method.client
 * @date 2018/1/30 16:13
 * @github http://github.com/shiyuan2he
 * @email shiyuan4work@sina.com
 * Copyright (c) 2018 shiyuan4work@sina.com All rights reserved.
 * @price ¥5    微信:hewei1109
 */
public class ClientTest {
    @Test
    public void createMachine(){
        // 打包给客户的集装箱
        List<Machine> list = new ArrayList<>() ;

        /**
         * 1.客户下订单,开始造车(2辆汽车,2两卡车,2两自行车)
         */
        // 造汽车生产线
        for(int i=0;i<2;i++){
            list.add(MachineFactory.createMachine(Car.class));
        }
        // 造卡车生产线
        for(int i=0;i<2;i++){
            list.add(MachineFactory.createMachine(Truck.class));
        }
        // 造自行车生产线
        for(int i=0;i<2;i++){
            list.add(MachineFactory.createMachine(Bike.class));
        }

        //客户开始测验每辆车的性能
        list.forEach(ele -> {
            ele.start() ;
            ele.speed();
            ele.stop();
            if(ele instanceof Car){
                ((Car) ele).blow();
            }
            if(ele instanceof Truck){
                ((Truck) ele).blow();
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值