2012-10-19 53 views
0

你如何在一個子類中有一個單身模式?例如在itemCatalog下面的代碼擴展項。我想用類項目你可以有一個單身人士作爲java的子類

public class ItemCatalog extends Item{ 

    private static ItemCatalog instance = new ItemCatalog(); 
    private Item itemCatalog[] = new Item[9]; 


    private ItemCatalog(){ 
    } 

    public static ItemCatalog getInstance(){ 
     return instance; 
    } 

    public void populateCatalog(){ 
     itemCatalog[0] = new Item("bb","Baked Beans",35); 
     itemCatalog[1] = new Item("cf","Cornflakes",100); 
     itemCatalog[2] = new Item("s0","Sugar",50); 
     itemCatalog[3] = new Item("tb","Tea Bags",115); 
     itemCatalog[4] = new Item("ic","Instant Coffee",250); 
     itemCatalog[5] = new Item("b0","Bread",50); 
     itemCatalog[6] = new Item("s0","Sausages",130); 
     itemCatalog[7] = new Item("e0","Eggs",75); 
     itemCatalog[8] = new Item("m0","Milk",65); 
    } 

    public void searchCatalog(String itemCode){ 

     for (int i = 0; i < itemCatalog.length; i++){ 
      if (itemCode.equals(itemCatalog[i].getItemCode())){ 
      price = itemCatalog[i].getItemprice(); 
      break; 
      } 
     } 
    } 

編輯2的用getPrice吸氣:我想有這個類作爲一個單身和項目類,這是不是一個單獨的子類。

當我把超(字符串itemCode,字符串描述,詮釋價格)在構造函數中,我得到一個錯誤

編輯3:好的,我想我解決這行代碼的問題。我是新來java..stilling練習和學習:) ...感謝大家對你的洞察力

private ItemCatalog() { 

    } 
    private ItemCatalog(String itemCode,String description, int price){ 
     super(itemCode,description, price); 
    } 

編輯4:我不知道這是否是正確的,但想用類項目用getPrice方法返回作爲價格的searchcatalog的結果。這是否是正確的設計?

+2

代碼有什麼問題? –

+0

爲什麼你讓'getInstance'同步,爲什麼你的構造函數後面有一個分號? –

+0

你已經在這裏有單身。你可以使'ItemCatalog'成爲最終的,所以沒有人可以創建'ItemCatalog'的子類。 –

回答

0

我不知道問題是什麼,但...

如果您的實例字段final如果一個靜態字段是最終你不需要​​中的getInstance()

中,引用是以線程安全的方式初始化的,不能更改,所以你不需要鎖定任何東西來訪問它。

+0

我想把這個類作爲項目的單例子和子類 – Adesh

+0

默認情況下,靜態初始化線程是否安全? –

+0

@NikitaBeloglazov它是線程安全的,但可能會改變的字段不是。 –

1

爲什麼你想這是一個子類?一個子類通常是專業化的(車輛 - >汽車,公共汽車或寵物 - >貓,狗)。子類的實例繼承其父類的所有字段和方法。我看到你的Item類有某種類型的ID,名稱和價格。因此,您的ItemCatalog實例也有一個ID,名稱和價格。我明白你想要的是一個單身人士,但我不認爲它是Item的子類的原因。你能解釋一下設計決定的原因嗎?

+0

我不確定這是否正確,但希望在類項目中使用getPrice方法返回作爲價格的searchcatalog的結果。這是否是正確的設計? – Adesh

+0

不要讓ItemCatalog成爲Item的子類。相反,在Item中,您可以編寫'price = ItemCatalog.getInstance()。searchCatalog(this.itemCode);' – jlordo

+0

並且不要讓'searchCatalog'成爲一個無效方法,而是讓它返回找到的價格。 – jlordo

0

您的設計需要改變。目錄需要與項目分開。

+0

我想在類項目中使用getPrice方法來返回作爲價格的searchcatalog的結果。這是否是正確的設計? – Adesh

+1

否。該項目只知道自己。目錄是項目的集合。搜索一個項目?詢問目錄。想知道物品的細節(價格)?詢問物品。想要以X的價格獲得所有物品?詢問目錄。 – Zagrev