を使用していないインタフェースの実装では、私は1つのインターフェイスを持つメソッドのパラメータ
このための3つの実装がありますpublic interface ItemFilter{
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List)
}
。
public Class Filter1 implements ItemFilter {
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
// Some logic like
if (obj1List != null) {
return items;
}
}
}
public Class Filter2 implements ItemFilter {
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
// Some logic like
if (obj2List != null) {
return items;
}
}
public Class Filter3 implements ItemFilter {
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
// Some logic like
if (obj1List.size() !=0 && obj2List.size() !=0) {
return items;
}
}
}
Filter1
items
とFilter2
はitems
とFilter3
はitems
をフィルタリングするobj1List
とobj2List
を使用してフィルタリングするobj2List
を使用してフィルタリングするobj1List
を使用しています。
filterChain
をループ内のすべてのフィルタで繰り返したいと思っています。
public Class FilterChain implements ItemFilter {
// Injected the Filter1, Filter2, Filter3 from guice multibinder
@Inject
private Set<ItemFilter> itemFilters;
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
List<Item> resultItems = items;
for(ItemFilter itemFilter : itemFilters) {
resultItems = itemFilter.filter(resultItems, obj1List, obj2List);
}
return resultItems;
}
}
ここでクラスFilter1
フィルタ方式のimplementaionは、変数として、余分なobj2List
を持つことになります。 1つの実装で使用されていないインタフェース宣言で変数を持つことはOKですか?
主なアイデアは、異なるフィルタを使用すると、異なるクラスのフィルタリングロジックを簡単に切り離すことができます。異なるフィルタは異なるパラメータを使用してList<Item>
をフィルタしています。
'Public class Interface'はインタフェースではないクラスです。 –
'items == obj1List == obj2List'なので、宣言された別の型だけで?それとも3つの特有のリストですか? – Izruo
"2つの実装があります" - あなたは3つを表示しますか? – alfasin