我正在开发Eclipse中的插件,它要求为Plugin类使用单例模式以访问运行时插件。该类保存对诸如Configuration和Resources之类的对象的引用。
在Eclipse 3.0插件运行时对象中 不是全球管理的,所以也是如此 通常无法访问。相反, 每个插件都可以自由声明API 这暴露了插件运行时 对象(例如,MyPlugin.getInstance()
为了让我的系统的其他组件访问这些对象,我必须执行以下操作:
MyPlugin.getInstance().getConfig().getValue(MyPlugin.CONFIGKEY_SOMEPARAMETER);
,这是过于冗长的IMO。
由于MyPlugin提供了全局访问权限,因此我不仅可以更轻松地提供对其管理的对象的全局访问权限吗?
MyConfig.getValue(MyPlugin.CONFIGKEY_SOMEPARAMETER);
有什么想法吗?
(我实际上是因为我正在阅读整篇文章“全球变量访问和单身人士是邪恶的”辩论)
答案 0 :(得分:1)
有什么想法吗?
是的,对于您正在检查的当前用例,您可以使用静态来略微简化示例代码。
但想想使用静力学的潜在缺点:
此外,您可以通过重构使代码更简洁; e.g。
... = MyPlugin.getInstance().getConfig().getValue(MyPlugin.CONFIGKEY_P1);
... = MyPlugin.getInstance().getConfig().getValue(MyPlugin.CONFIGKEY_P2);
变为
MyConfig config = MyPlugin.getInstance().getConfig();
... = config.getValue(MyPlugin.CONFIGKEY_P1);
... = config.getValue(MyPlugin.CONFIGKEY_P2);
答案 1 :(得分:0)
你建议
MyPlugin.getInstance().getConfig().getValue(MyPlugin.CONFIGKEY_SOMEPARAMETER);
太冗长了
MyConfig.getValue(MyPlugin.CONFIGKEY_SOMEPARAMETER);
可能会更好。按照这个逻辑,不会:
getMyConfigValue(MyPlugin.CONFIGKEY_SOMEPARAMETER):
更好(也许不短,但更简单)?我建议你写一个本地帮手方法。
这为您提供了可读性的优势,而不会绕过那些通过简单/简单/简单方式修复代码的人所制定的概念。
一般来说全局变量在任何情况下都很糟糕。单身人士也是一个不起眼的概念,但他们在一堂课中打破了公共静默的地狱。
考虑如何模拟这样的课程。嘲弄公共静态是非常令人讨厌的。嘲弄单身人士很难(你必须在每个使用它的方法中覆盖你的吸气剂)。依赖注入是下一个层次,但它可以是DI和一些简单单例之间的触摸调用。