1小时搞懂设计模式之工厂模式(简单工厂)

1 什么是工厂模式

一说到工厂你有可能会想到 食品加工厂,汽车工厂,钢厂等。 这些工厂能帮我们干什么呢? 比如:食品加工厂帮我们生产 面包 饼干,汽车工厂帮我们生产汽车 。钢厂能帮我们生产钢。诸如这些生产模式都可以理解成工厂模式。

2 工厂模式的特点

说完了什么是工厂模式,我们这说一下工厂模式的特点。也就是满足什么条件就是工厂模式。

  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+"成功!");
	}
}

测试结果如下。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值