继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用设计模式出任CEO迎娶白富美(7)–建造者模式解决工艺复杂问题

程序员大阳
关注TA
已关注
手记 357
粉丝 1.5万
获赞 1523

对工艺流程的思考

工艺有很多种,不同产品工艺流程不同,不同的工艺流程有不同的操作顺序。

以目前车间生产的主流产品物联网水表为例,需要先装配基表(可以通水的部分),然后安装电池,最后安装网络模块(负责将水表接入网络,实现远程抄读与控制)。

目前需要控制生产流程严格的安装基表–电池–网络模块先后顺序来实完成。

该怎么办呢。

对建造者模式的参考

与顺序相关的设计模式不就是建造者模式么,二毛突然脑子里闪过一道光,何不参考下设计模式,看看能不能获取设计上的灵感。

于是二毛打开经典的Eclipse,开始针对当前的场景进行代码实现。

首先,我们要生产物联网表,该产品具备基表、电池、网络模块。

/**
 * 物联网仪表
 */
public class IotMeter {
	// 基表
	private String basic;
	// 电池
	private String battery;
	// 网络模块
	private String connection;
	// 省略 get set...
}

然后,我们要实现产品的制造(Builder),我们抽象的看制造这件事,就是装配基表、装配电池、装配网络模块,最后得到一个完整的产品。

/**
 * 抽象制造接口
 */
public interface IBuilder {
	/**
	 * 装配基表
	 */
	public void buildBasic();

	/**
	 * 装配电池
	 */
	public void buildBattery();

	/**
	 * 装配网络模块
	 */
	public void buildConnection();

	/**
	 * 得到完整产品
	 */
	public IotMeter buildMeter();
}

有了产品制造的抽象接口,我们针对具体的物联网表制造有一个单独的制造类。

/**
 * 具体建造者
 */
public class IotMeterBuilder implements IBuilder {
	private IotMeter iotMeter;

	public IotMeterBuilder(IotMeter inputMeter) {
		this.iotMeter = inputMeter;
	}

	@Override
	public void buildBasic() {
		iotMeter.setBasic("装备基表");
		System.out.println("已装配基表");
	}

	@Override
	public void buildBattery() {
		iotMeter.setBattery("装配电池");
		System.out.println("已装配电池");
	}

	@Override
	public void buildConnection() {
		iotMeter.setConnection("装配网络模块");
		System.out.println("已装配网络");
	}

	@Override
	public IotMeter buildMeter() {
		return iotMeter;
	}
}

此时重点就来了,我们虽然有制造类可以装配各个组件,最终得到整个产品。但是我们没法控制顺序。

就像虽然有制造各个组件的工人,但是他们的工作没有先后顺序。而且在流水线作业的情况下,每个工作只负责一个装配工序,工人是没法控制装配的先后顺序的。

所以是必须要有指挥者的角色,来控制装配的顺序。

/**
 * 指挥者
 */
public class Director {
	public IotMeter makeIotMeter(IBuilder builder) {
		builder.buildBasic();
		builder.buildBattery();
		builder.buildConnection();
		return builder.buildMeter();
	}
}

这样所有的生产计划,下达给指挥者,指挥者负责协调每个产品的装配顺序,并最终获得一个完整的可靠产品。

这样,车间在下达生产任务时,可以直接下发给指挥者。

/**
 * 车间
 */
public class Workshop {
	public static void main(String[] args) {
		// 将生产任务下达给指挥者即可
		Director director = new Director();
		// 指挥者指挥生产物联网表
		IotMeter meter=director.makeIotMeter(new IotMeterBuilder(new IotMeter()));
	}
}

此时运行程序,查看输出,果然生产一个产品的顺序是按照指挥者指定的顺序。

已装配基表
已装配电池
已装配网络

理论联系实践

这天,二毛把3个班长叫到办公室,先给这仨讲了下建造者模式,结果三人一脸迷茫…

好吧,一如既往的迷茫,还是要加强对设计模式的学习啊。

不懂模式没事,反正按照模式的话,要解决工艺流程中的操作顺序问题,就必须有指挥者的角色存在。

对每个型号的产品,要细分有一个装配工序。

然后针对每型产品,都要有对应的指挥者,既然班长比较忙,那就由班长指定几个能力比较强的工人,每个工人负责若干型号的指挥。

那么如何考核呢?这个也很简单,指挥者要落实最后的整个产品的获取,也就是说整个产品的质量与指挥者直接相关。

将指挥者对应产品型号的合格率纳入该指挥者的绩效考核就OK了。

当然了,这里面还有若干细节,于是当天3个班长跟二毛讨论了一下午。

直到街灯渐亮、直到路上行人匆匆,一套参考建造者模式的工序管理方案终于落定。

接下来就是试行、监督执行了,这里面可能还有不少困难吧。

改革是困难的,但是只要脚踏实地,应该会收获价值吧。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP