2011-08-26 80 views
0

我想知道是否存在任何基於某些標準(例如,他們的UUIDS)過濾元素的設計模式。我結束了我的代碼中有這樣的事情:過濾元素的設計模式

if(meetsSomeCriteria(thing))){ 
    doSomething() 
} 

舉例來說,在我的代碼,我通過使用地圖過濾基於其ID的一些元素:

if(!mymap.containsKey(myObject.getId())){ 
     doSomething(); 
     mymap.put(myObject.getId(), myObject); 
    } 

的問題是,這程序中無處不在的代碼。我想知道設計模式是否可以幫助我並給出一些提示/示例。

謝謝!

+0

我不明白你的問題。你問有沒有圖書館爲你做這件事,或者你問是否有更好的方法來重構你的代碼? –

+0

我正在尋找一種更好的方式來重構我的代碼,這樣我就可以用一個更清潔的屏障取而代之 – Dimitri

+2

看看番石榴http://guava-libraries.googlecode.com –

回答

3

您可以使用apache commons -collectionsCollectionUtils。例如:

Collection matches = CollectionUtils.select(collection, new Predicate() { 
    public boolean evaluate(Object object) { 
     // evaluate predicate 
    } 
}); 

在內部,它很可能只是迭代集合並執行謂詞,但它會保存您的樣板代碼。

+0

嘿,這很酷,還有一個這個通用版本? – kukudas

+0

在公共收藏版的發行版上有(如果你進入svn回購的話)。似乎他們還沒有做出泛型版本的穩定/ GA版本。 – pap

1

攔截過濾器是j2ee廣泛用於過濾請求/響應的一種模式。你可以實現類似的東西。