我一直在設計問題上受到挑戰,我將在下面進行介紹。構造器的設計模式
假設一個類,稱爲A,有一個帶有一堆參數的構造函數。由於在每個實例化中寫入所有這些參數都很累人,所以我編寫了另一個類,將其稱爲StyleSheetA,它封裝了所有這些參數,並且是構造函數的唯一參數。這樣,我可以準備一些默認值StyleSheetA模板稍後會用到,如果需要的話,我可以修改它們。
在這一點上,我需要擴展A.假設B擴展A. B將有它自己的樣式表,即StyleSheetB。我認爲StyleSheetB擴展StyleSheetA是合適的,所以對於一個樣式表參數,B的構造函數也可以構造它的超類A.但是我擔心這種設計可能存在缺陷。例如,如果我決定爲樣式表添加一個getter/setter?有沒有一種新穎的方式來處理所有這些情況?我錯了嗎?對於那些誰是困惑,我在這裏附上一些代碼:
class A
{
StyleSheetA ss;
A(StyleSheetA ss)
{
this.ss = ss;
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetA
{
int n1;
int n2;
// :
// :
int n100;
}
class B extends A
{
B(StyleSheetB ss)
{
super(ss);
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetB extends StyleSheetA
{
int n101;
int n102;
// :
// :
int n200;
}
謝謝你的任何幫助或建議,也可以是任何的批評可以理解的。
編輯:我在java中開發,所以沒有泛型支持。
對於我正在開發的語言來說,這並不明顯(但對我而言),但通常泛型/模板可以幫助解決此問題。通過將A類變爲A,您可以在從中派生類型時指定組合的類型(例如StyleSheetB):B類延伸A 。如果你沒有這樣的功能,試試C#;) –
2011-02-09 21:38:46
是的,你的解決方案將是一個很好的方法,但不幸的是我用java開發,並且沒有通用的支持。謝謝。 – 2011-02-09 21:41:42
你應該添加一個java-me標籤。 ;) – weltraumpirat 2011-02-09 21:48:34