有几种方法在这里:
首先,你能想出了extends BitSet
类一个更好的名字。不,BitsetWithConversionMethods
不是一个好名字,但也许像ConvertibleBitSet
是。这是否表达了课堂的意图和用法?如果是这样,这是一个好名字。同样,您可能有HashableString
(请注意,您不能延长String
,正如Anthony在另一个答案中指出的那样)。这种使用XableY
(或XingY
,如BufferingPort
或SigningEmailSender
)命名子类的方法有时可以用来描述添加新行为的有用方法。
这就是说,我认为你的问题有一个公平的暗示(不能找到一个名字),也许这不是一个好的设计决定,它试图做太多。一个班级应该“做一件事”通常是一个很好的设计原则。显然,取决于抽象的级别,可以将其扩展为包含任何内容,但是值得考虑的是:“操作若干位的设置/未设置状态”和“将位模式转换为另一种格式”计为一事情?我认为(特别是暗示你很难得到一个名字),他们可能是两个不同的责任。如果是这样,有两个类最终会变得更清洁,更容易维护(另一个规则是'一个类应该有一个改变的理由';一个类操作+ convert至少有两个理由来改变),更容易测试在隔离等。
所以不知道你的设计,我会建议也许两个类;在BitSet
示例中,既有BitSet
也有(比如)BitSetConverter
,它负责转换。如果你想获得真正看中的,甚至可能是:
interface BitSetConverter<T> {
T convert(BitSet in);
BitSet parse(T in);
}
,那么你可能有:
BitSetConverter<Integer> intConverter = ...;
Integer i = intConverter.convert(myBitSet);
BitSet new = intConverter.parse(12345);
这确实隔离的更改,使得每个不同的转换器可测试等
(中当然,一旦你这样做,你可能会喜欢看guava,并考虑使用Function,例如Function<BitSet, Integer>
为一个案例,Function<Integer, BitSet>
为另一个案例,然后你获得整个生态系统Function
- 支持代码,可能会有用)
感谢这个非常好的答案! – tyrondis 2011-05-16 13:15:43