我有以下的抽象類如何設計交集操作對不同類型的一組
public abstract class Set implements Iterable<String>
{
public abstract boolean contains(String value);
public Iterator<String> iterator();
}
與以下實現
public EmptySet extends Set {
// a set that does not contain any value
}
public EnumSet extends Set {
private List<String> values;
// a set that contains a fixed list of values
}
public StringSet extends Set {
private List<Character> alphabet;
private int minLength;
private int maxLength;
// a set of all strings consisting of the given characters and for which minLength <= length <= maxLength
}
public DifferentFromDecorator extends Set {
private Set origSet;
private List<String> illegalValues;
// a set which contains the values of another set minus a list of values
}
新的實施,預計在未來的工作。
我現在想實現具有以下簽名的交集操作:
public Set intersection(Set firstSet, Set secondSet)
什麼是執行的操作,避免複雜的樣板代碼的好辦法?請注意,我知道有效地找到這兩種類型的交集的步驟。我對有關(可能)很多組合的良好設計模式感興趣。
我認爲交集方法應該是類「Set」的一部分,以便可以調用Set intersection = setA.intersection(setB)。另外,由於您已經提取了「Set」的概念,因此不確定您所指的是哪個鍋爐板代碼。 Set實現中發生的事情不會成爲Set用戶的關注點 –