我正在努力为物流查询做一个安静的api。
它接受两个参数:shipping_id和tracking_number,它会调用第三方api来获取结果并用它做一些事情。
有不同公司提供的数十个第三方api,并且要调用的次数取决于shipping_id的值。
我的解决方案是这样的:
将会有一个超类' LogisticsQueryController'
和许多子类:
' ALogisticsQueryController',' BLogisticsQueryController' ... extends' LogisticsQueryController'。
并保留地图(' shipping_id' =>' class_dir')。
给出shipping_id后,我可以通过shipping_id获取class_dir,然后使用反射获取新实例。
但我听说Java中的反射可能效率低下,那么更好的解决方案是什么?
答案 0 :(得分:2)
是反思是无效的。我在你的场景中看不到任何使用反射的原因。如何实现工厂设计模式,通过静态工厂方法为每个shipping_id获取特定实例的新实例。
答案 1 :(得分:1)
一般来说,反思当然是“更昂贵的”#34;比普通"普通"字节码。
但请记住:您已经在谈论面向网络"接口。
因此,即使反射的使用对您的总体响应时间增加10毫秒,也可以接受这种惩罚 - 假设它可以帮助您创建易于扩展的干净,可维护的体系结构;例如,当您必须添加时未来的其他第三方图书馆。
因此答案是:首先衡量反射的预期用法是否对性能产生重大影响。然后评估使用反射是否真的有助于提高架构的质量。
另一方面:你不能简单地创建一个工厂界面,以及该界面的许多不同实现,它们知道如何在不使用反射的情况下创建所需的对象?然后你只需将这些工厂的实例放入地图中。