我有一个单件工厂类,在第一次实例化时,从文件中加载(异步)某些信息。
这些信息对工厂生产的产品很重要。
我的问题与如何处理工厂用户可能在工厂加载信息文件之前(以及之后)请求产品的事实有关。
最重要的是,以优雅的方式做到这一点。
答案 0 :(得分:0)
我刚刚找到了一对解决方案,我将在下面解释,以供将来参考。
解决方案编号1:
在工厂中设置3个方法:OrderProduct,Produce,PickUpOrder。
用户首先调用OrderProduct,工厂保存订单并返回OrderId。
用户在工厂为事件“Produced”设置事件监听器,该事件的回调方法将检查生成的订单是否等于用户从调用OrderProduct获得的OrderId,如果是,则调用具有给定OrderId的PickUpOrder,工厂将退回产品。
设置监听器后,用户调用Produce。
产品调用检查工厂是否已完成加载,如果是,则遍历所有订单列表,生成给定订单的产品,并使用OrderId为生产的产品分派事件“Produced”。
工厂在完成加载信息文件后也会调用产品。
解决方案编号2:
如果我们很幸运,用户知道一个独特的产品ID,我们可以扭转第一个解决方案,使其更优雅。
我们首先将侦听器设置为侦听,就像我们在解决方案1中所做的那样,但现在侦听器根据产品ID检查事件参数的orderId,他将要求。
然后使用产品ID调用OrderProduct,工厂将在内部使用它作为第一个解决方案的OrderId。
在我看来,解决方案2更好,因为它也支持多线程,但我很乐意讨论对我的方法或更好的解决方案的批评。
每个人都快乐的一天!