2010-07-11 62 views
8

我无法理解这一点。基本上,这个Lookup API被用来保持松耦合的模块间性质。那么基本上,服务提供者和消费者模块可以使用Lookup API正确地相互通信?什么是netbean的查找?

但我不明白的是:

是查找像一大袋这为该类的对象呢?有人可以提供一个更简单的比喻吗?

因此,创建了依赖关系,并且您在服务使用者中实现了LookupListener是否正确?消费者显然依赖提供者。

然后LookupListener监听的实现是什么?它是自己的查找?所以如果有另一个模块类的映射,它将作为一个对象存储在LookupListener实现的查找中?

查找就像一个可以存储另一个模块的类的包,它的方法?

这是确定选择的正确过程吗?

  1. 在TopComponent(view)中实现Lookup Listener和action Listener。
  2. 你做了一个新的对象(来自其他模块)
  3. associateLookup(Lookups.singleton(fff));再次,与这条线混淆:什么是associateLookup()究竟在做什么?
  4. result = Utilities.actionsGlobalContext().lookupResult(Browser1.class);这条线是干什么的?结果是什么?它包含Browser1类(来自其他模块)?
  5. result.addLookupListener (this);为什么要添加监听器?我们在听什么,为什么在TopComponent上?

  6. 完成?

最后,为了进一步说明我的困惑,Node API如何进入平台?

+2

您可以在这里找到大量关于NetBeans平台的信息和视频教程:http://netbeans.org/kb/trails/platform.html – Jesper 2010-07-11 07:26:03

回答

2

您可以将Lookups视为支持松散耦合高内聚原理的基本工具。

基本上你在beverage-api模块的API:

public interface Beverage { 
    ... 
} 

然后另一个模块beers取决于beverage-api:在另一个模块中,其也取决于beverage-api

@ServiceProvider(service = Beverage.class) 
public class SomeBeer implements Beverage { 
    ... 
} 

可以编写一个魔术公式:

Collection list = Lookup.getDefault().lookupAll(Beverage.class); 

这将为您提供周围所有饮料供应商的清单,而无需声明对特定类的确切依赖关系或依赖于该模块。这太好了,你的代码不依赖于具体的实现,只需要将这些模块放在类路径中就可以了,它们会自动加载到你的应用程序中。

associateLookup(Lookups.singleton(fff));再次,混淆这行:什么是associateLookup()正在做什么?

是的,这是令人困惑的。基本上你手动添加一些对象到查找系统。

result = Utilities.actionsGlobalContext().lookupResult(Beverage.class);

Utilities.actionsGlobalContext()于当前选定的(活性)TopCompoment有关。如果它存在于活动组件中,它将返回Beverage.class的实例。如果你想要给定类的所有实例,你应该使用lookupAll()

result.addLookupListener(this);为什么要添加监听器?

要获取有关更改的通知。当用户选择一些Beverages对象它触发LookupListener方法:

void resultChanged(LookupEvent ev); 

result.allInstances();将返回选择哪些实例。