工厂模式之简单工厂

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljk126wy/article/details/85248375

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

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

猜你喜欢

转载自blog.csdn.net/ljk126wy/article/details/85248375