2010-07-11 61 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();將返回選擇哪些實例。