简单工厂模式FactoryPattern

工厂模式是常见的设计模式之一,原理可以类比工厂里面有N个生产线各司其职生产商品,其实所谓的设计模式就是一种既定的代码习惯,无外乎此.下面博主会简单的说下自己对工厂模式的理解与代码demo,仅供参考.语言是死的,人是活的.废话不多说,开整.
博主此次demo中的代码共分为五个文件:
1.接口:Food.java(食物接口,可以类比食物生产许可证)
2.类:NoodleProductLine.java继承Food接口(面条类(类比生产线))
3.类:DumplingProductLine.java继承Food接口(饺子类(类比生产线))
4.类:FoodFactory.java(类比食品厂)
5.类:FactoryPatternDemo.java工厂入口
接下来是这五个文件的关系:
这里写图片描述
接下来上代码:

package com.example.factoryPattern;

/**
 * Created by zhangrui on 2018/4/20.
 */
/*/**
* @author zhangrui
* @Description 食物接口,可以类比食物生产许可证
* @Date 10:31 2018/4/20
* @Param
* @returu
**/
public interface Food {
    public String creat();
}
package com.example.factoryPattern;

/**
 * Created by zhangrui on 2018/4/20.
 */
/*
* @ClassName DumplingProductLine
*@Description TODO 饺子类(类比生产线) 这条生产线具有生产食物的资质 根据自身需求专门用来生产--饺子
*@Author zhangrui
*@Date 10:31 10:31
*@Version 
* */
public class DumplingProductLine implements Food{
    @Override
    public String creat() {
        return  ceretDumpling();
    }

    private String ceretDumpling() {
        return "工厂生产了饺子(I'm a fresh dumpling)";
    }
}
package com.example.factoryPattern;

/**
 * Created by zhangrui on 2018/4/20.
 */
/*
* @ClassName NoodleProductLine
*@Description TODO 面条类(类比生产线) 这条生产线具有生产食物的资质 根据自身需求专门用来生产--面条
*@Author zhangrui
*@Date 10:30 10:30
*@Version 
* */
public class NoodleProductLine implements Food{
    @Override
    public String creat() {
        return creatNoodle();
    }
    private String creatNoodle() {
        return "工厂生产了面条(I'm a noodle)";
    }
}
package com.example.factoryPattern;

/**
 * Created by zhangrui on 2018/4/20.
 */
/*
* @ClassName FoodFactory
*@Description TODO 创建食品工厂生产根据订单要求生产食品
*@Author zhangrui
*@Date 10:41 10:41
*@Version 
* */
public class FoodFactory {
    //工厂有两条生产线
    NoodleProductLine noodleProductLine = new NoodleProductLine();
    DumplingProductLine dumplingProductLine = new DumplingProductLine();
    //声明处理结果msg
    String msg= "";
    //进货商提交订单需求foodType
    public String creatFood(String...foodType){
        //对进货商的需求进行判断
        //如果需要的是
        for (int i = 0;i < foodType.length;i++ ){
            if (foodType[i].equals("noodle")){
                //调用面条生产线生产面条
                msg += noodleProductLine.creat();
            }else if (foodType[i].equals("dumpling")){
                //调用饺子生产线生产饺子
                msg += dumplingProductLine.creat();
            }else {
                //工厂没有对应的生产线,那就没办法调用生产线生产食物,所以返回提示信息
                msg += "订单中的食物"+foodType[i]+"我们厂没办法成产,找别家看看吧";
            }
        }
        //工厂运行确认完毕
        return msg;
    }
}
package com.example.factoryPattern;

/**
 * Created by zhangrui on 2018/4/20.
 */
/*
* @ClassName FactoryPatternDemo
*@Description TODO
*@Author zhangrui
*@Date 11:00 11:00
*@Version 
* */
public class FactoryPatternDemo {
    public static void main(String[] args) {
        //声明一个工厂
        FoodFactory foodFactory = new FoodFactory();
        //订单
        String[] order = {"noodle","dumpling"};
        //购货商向工厂下发订单,经过食品厂操作后返回结果
        String meg = foodFactory.creatFood(order);
        //对返回的结果进行输出
        System.out.println(meg);
    }
}

运行结果如下图所示:
这里写图片描述
工厂模式的设计理念比较简单,核心理念就是各司其职,有很高的单一性,但是,随着业务需求的增多,随之而来的是生产线的增多.
使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,”POP3”、”IMAP”、”HTTP”,可以把这三个作为产品类,共同实现一个接口。(粘贴而来)
下面是本篇博文代码的GitHub地址,有需要的可以前去copy:
工厂模式github地址
Over!

猜你喜欢

转载自blog.csdn.net/m0_37190495/article/details/80018426
今日推荐