0

サブクラスにシングルトンパターンをどのように持っていますか? たとえば、以下のコードでは itemCatalog が item を拡張しています。クラス item の getPrice ゲッターを使いたい

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: このクラスをシングルトンとして、シングルトンではないアイテム クラスのサブクラスにしたいと考えています。

コンストラクターに super(String itemCode, String description, int price) を配置すると、エラーが発生します

編集 3: OK、これらのコード行で問題を解決できると思います。私はJavaが初めてです..まだ練習と学習を続けています:) ...あなたの洞察に感謝します

private ItemCatalog() {

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

編集 4: これが正しいかどうかはわかりませんが、クラス item で getPrice メソッドを使用して、価格である searchcatalog の結果を返したいと考えていました。これは正しい設計でしょうか?

4

3 に答える 3

1

なぜこれをサブクラスにしたいのですか?サブクラスは通常、専門分野です(車両->車、バス、またはペット->猫、犬)。サブクラスのインスタンスは、その親クラスのすべてのフィールドとメソッドを継承します。あなたのItemクラスには、ある種のID、名前、価格があるようです。したがって、ItemCatalogのインスタンスにも、ID、名前、および価格があります。シングルトンが必要なことは理解していますが、Itemのサブクラスである理由はわかりません。その設計決定の理由を説明できますか?

于 2012-10-19T17:07:31.497 に答える
0

質問の内容がよくわかりませんが...

インスタンス フィールドを作成する場合、getInstance()finalは必要ありません。synchronized

static フィールドが final の場合、参照はスレッドセーフな方法で初期化され、変更できないため、アクセスするために何もロックする必要はありません。

于 2012-10-19T16:50:40.033 に答える
0

デザインを変更する必要があります。カタログはアイテムから分離する必要があります。

于 2012-10-19T17:11:06.147 に答える