Puoi sempre iniziare con un metodo sulla classe Box:
public class Box {
private List<Item> items;
public filter(string x, string y) {
List<Item> filteredItems = new List<Item>();
if (x == 'abc' && y == 'jkl') {
filterItems.add(items[0]);
filterItems.add(items[5]);
filterItems.add(items[10]);
}
else if (x == 'abc') {
filterItems.add(items[7]);
filterItems.add(items[3]);
}
else {
filterItems = // copy the items field
}
return filterItems;
}
}
Se ciò non è sufficiente, puoi utilizzare il Pattern di strategia per determinare la strategia di filtro in base ai valori di x
e y
in fase di esecuzione:
public class Box {
private List<Item> items;
public static BoxItemFilterStrategy getFilterStrategy(string x, string y) {
if (x == 'abc' && y == 'jkl') {
return new BoxItemFilterStrategy1();
}
else if (x == 'abc') {
return new BoxItemFilterStrategy2();
}
return new DefaultBoxItemFilterStrategy();
}
public List<Item> filter(BoxItemFilterStrategy filterStrategy) {
return filterStrategy.filter(items);
}
}
public interface BoxItemFilterStrategy {
List<Item> filter(List<item> items);
}
public class BoxItemFilterStrategy1 implements BoxItemFilterStrategy {
public List<Item> filter(List<item> items) {
// return items 0, 5 and 10
}
}
public class BoxItemFilterStrategy2 implements BoxItemFilterStrategy {
public List<Item> filter(List<item> items) {
// return items 7 and 3
}
}
public class DefaultBoxItemFilterStrategy implments BoxItemFilterStrategy {
public List<Item> filter(List<item> items) {
// return all items
}
}
E un esempio di utilizzo:
Box box = new Box();
// add items
BoxItemFilterStrategy strategy = Box.getFilterStrategy(x, y);
List<Item> filteredItems = box.filter(strategy);
Dipende tutto dalla complessità della logica di filtraggio.