版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljk126wy/article/details/85248375
1 什么是工厂模式
一说到工厂你有可能会想到 食品加工厂,汽车工厂,钢厂等。 这些工厂能帮我们干什么呢? 比如:食品加工厂帮我们生产 面包 饼干,汽车工厂帮我们生产汽车 。钢厂能帮我们生产钢。诸如这些生产模式都可以理解成工厂模式。
2 工厂模式的特点
说完了什么是工厂模式,我们这说一下工厂模式的特点。也就是满足什么条件就是工厂模式。
- 需要有资源 和生产资源的实体两个对象。
- 获取资源要通过 生产资源的实体。
这里的资源我们就可以理解成 面包 汽车。 生产资源的实体就是 食品加工厂 和生产汽车工厂。
3 工厂模式之简单工厂代码实现
我国是产钢大国 下面我就是钢厂 生产钢来举例。我特意百度一下钢的种类,按成形方法钢分为:(1) 锻钢;(2) 铸钢;(3) 热轧钢;(4) 冷拉钢 4种,
3.1 通过代码模拟钢种类实体
钢实体类接口
该接口中有一个获取钢种类名称的方法。
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public interface Steel {
public String getName();
}
铸钢实体类
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public class CastSteel implements Steel{
private final String name = "铸钢";
public String getName() {
return name;
}
}
冷拉钢实体类
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public class ColdDrawnSteel implements Steel{
private final String name = "冷拉钢";
public String getName() {
return name;
}
}
锻钢实体类
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public class ForgedSteel implements Steel{
private final String name = "锻钢";
public String getName() {
return name;
}
}
热轧钢实体类
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public class HotRolledSteel implements Steel{
private final String name = "热轧钢";
public String getName() {
return name;
}
}
3.2 通过代码模拟钢厂类实体
这里我们通过定义 SteelFactory 中的getSteel方法来获取具体类型的钢,该方法可以通过钢种类名称来获取钢种类对象。
钢厂实体类
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public class SteelFactory {
public static Steel getSteel(String name) {
if("castSteel".equals(name)) {
return new CastSteel();
}
if("coldDrawnSteel".equals(name)) {
return new ColdDrawnSteel();
}
if("forgedSteel".equals(name)) {
return new ForgedSteel();
}
if("hotRolledSteel".equals(name)) {
return new HotRolledSteel();
}
return null;
}
}
模拟钢厂生产钢的过程测试类
package cn.zhuoqianmingyue.examples.factorypattern.simple;
public class ApplicationTest {
public static void main(String[] args) {
//生产铸钢
Steel castSteel = SteelFactory.getSteel("castSteel");
log(castSteel.getName());
//生产冷拉钢
Steel coldDrawnSteel = SteelFactory.getSteel("coldDrawnSteel");
log(coldDrawnSteel.getName());
//生产锻钢
Steel forgedSteel = SteelFactory.getSteel("forgedSteel");
log(forgedSteel.getName());
//生产热轧钢
Steel hotRolledSteel = SteelFactory.getSteel("hotRolledSteel");
log(hotRolledSteel.getName());
}
private static void log(String name) {
System.out.println("生产"+name+"成功!");
}
}
测试结果如下。