工厂模式是常见的设计模式之一,原理可以类比工厂里面有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!