我有很多T數組可讀。 每個T陣列可以表示類型A,B或C. A的數據:t的列表 B:單Ť C:究竟三顆T我應該繼承或使用枚舉嗎?
當我讀爲T陣列,我將能夠得到T的列表,並通過讀取列表中的第一個T來確定它是A,B或C類型。 我想到了兩種可能的方法,並希望知道它們的優缺點。
1)
enum {A, B, C};
class X {
enum dataType;//A, B or C
List<T> data;//just store all as list of T
//other essential methods/properties
//throws exception if an instance cannot fit into either A, B or C.
X(T[] input)
{
//read input
}
}
2)
abstract class X
{
abstract int length{get;}
//and other common essential methods/properties
}
class A : X
{
List<T> data;
}
class B : X
{
T data;
}
class C : X
{
T data1, data2, data3;
}
class ConcreteX: X
{
List<T> data;
ConcreteX(T[] input)
{
//reads input and stores T(s) into data
}
}
class XFactory
{
getX(T[] input)
{
ConcreteX conX = new ConcreteX(input);
//depending on whether it's A, B or C, create an instance of A, B,
//or C and map the corresponding fields from conX to the instance.
//return that instance
}
}
如果可能的話,最好是讓代碼不關心類型。也就是說,讓每個類型都對一些抽象操作作出響應,然後對它們進行相同的操作。 – 2010-09-04 06:56:53