有一个大工厂,里面分为4种不同的工种.
一个厂房是做钢化玻璃,一个厂房是做相框框架,
一个厂房是做油画素描,一个厂房是做螺栓钉子.
其中这4种厂房中生产线都基本类似,但是不完全一致.
但80%雷同.
如,
在钢化玻璃制造时,在B操作流程,要额外加人工1人
在螺栓钉子制造时,在C操作流程,要额外添加一盒工人工具.
在相框框架制造时,在B操作流程,要额外使工人额外拥有一副手套.
在油画素描制造时,在D操作流程,要额外使工人佩戴眼镜.
假设操作流程最大不会超过10个,每个小厂房中的流程类似80%,但是有的流程多一步,有的少两步等,而流程就算都在B操作流程,也有类似上面同B操作流程但不同工厂不同操作.
我现在的设计是,将BCD,等等的10个流程操作,作为一个实现类,
其用来实现不同工厂的接口
(Gang)钢化玻璃接口: produceBL();是最终方法,生产玻璃,其produceBL()为default实现,如输出语句:"生产钢化玻璃"
(Kuang)相框框架接口: produceXK();是最终方法,生产相框,其produceXK()为default实现,如输出语句:"生产相框框架"
...等等
而至于在B操作流程,对于钢化玻璃制造和相框框架制造对人员使用的不同,
将BNode实现Gang,Kuang接口,
重写default方法,在实现Gang接口的produceBL()后,对该方法加入addWorker(1)类似方法置于原produceBL()方法之上.
再重写Kuang的produceXK()方法,对该方法加入addGloves(1)方法置于produceXK()方法之上.
实际使用起来,在类似不需要额外进行加工人或加手套的默认节点上,其节点默认实现接口,但不进行Override重写,可以执行接口的default生产方法.而需要该节点额外操作时,会进行额外操作,如上所述.
现在面临的问题是该大工厂执行更精细化分工,又将钢化玻璃改为钢化工厂和玻璃工厂,
将油画素描工厂改为油画工厂,素描工厂,并将生产线进行了不同规格改造,将操作流程
稍微进行了调整,但其类似度还是80%.
而在不同的操作流程Node节点实现的接口(Gang,Kuang,Youhua,Sumiao...)越来越多.
每个实现类要实现的方法又变得难以掌控.
该怎样来继续优化这个工厂类,并使得实现类(节点)实现的接口变得不那么繁多.维护更加方便?
问题扩充:
有大牛说可以尝试下策略或者生成器模式,
昨天又看了下生成器模式,感觉其实可以声明不同流水线的Builder,
在各自Builder内参数中对不同步骤进行方法重写.
在Director中调用不同的builder时,根据Spring获取到不同的builder bean实例.
继而执行许需要的方法.
使用builder的方式没有采用,而是使用的通过统一接口的静态方法,通过反射来获取不同的
流程的不同的方法名,来执行操作.
这样做的唯一要求就是在各个流程中的接口方法要统一命名,要符合命名规范.
不过这样梳理出来后,觉得其实通过方法名还是不靠谱,其实可以写一个方法上用的
注解,通过注解了该注解如 @NodeType(name= FlowType.Gang.getFlowType())
emmmm,还是建议画一个uml类图,不然估计你自己都晕的。我觉得大概是生成器模式比较适合。操作流程不多,直接写成方法就行。