2013-03-24 105 views
0

按工廠方法實施字母表是否有點意思?使用按工廠方法實施字母表

public class Alphabet 
{ 
    public Alphabet(image picture, string name) 
    { 
     _picture = picture; 
     _name = name; 
    } 

    public void Show() 
    { 
     _picture.Show(); 
    } 
} 

public LetterA: Alphabet 
{ 
    public LetterA() : Alphabet("lttrA.png", "Letter A"){} 
} 

.... 


public LetterZ: Alphabet 
{ 
    public LetterZ() : Alphabet("lttrZ.png", "Letter Z"){} 
} 

Alphabet ltr1 = new LetterA(); 

要求:照片將永遠不會改變,在未來

感謝

沒有添加方法

回答

0

工廠方法提供了新的實例每個調用的類。在你的情況下,不需要創建多個實例,你可以爲字母創建一個枚舉。

public enum Alphabet 
{ 
    A(/*some image*/, "A"), 
    B(/*some image*/, "B"), 
    C(/*some image*/, "C"), 
    D(/*some image*/, "D"); 
    // ... and so on till Z 

    private final String name; 
    private final Image picture; 

    private Alphabet(Image picture, String name) 
    { 
     this.picture = picture; 
     this.name = name; 
    } 

    public void Show() 
    { 
     picture.Show(); 
    } 
} 
+0

所以,我需要26類和額外的方法實例(因爲單身人士)。 但26班還有26班?我的意思是,可以有其他方式來實現字母表,沒有子類爆炸?謝謝。 – zzfima 2013-03-24 08:16:03

+0

我的觀點是工廠方法在這種情況下不相關。我修改了我早期的代碼,使用枚舉而不是多個單例。希望這可以幫助! – Param 2013-03-24 19:23:31

0

你爲什麼想要26個子類?如果我明白你想從一個字符串映射到一個圖像文件。一張簡單的地圖就足夠了。也許一種方法來處理訪問該地圖,檢查只有字母傳遞,規範化他們(大寫),...