演習問題4(陳列棚)


演習問題4-2 (Observer)

演習問題4-1で、売り切れになった陳列棚に他の陳列棚の商品を移し、その情報を表示しました。

しかし、それ以外の情報も表示したいので、別の情報を表示する Staff クラスを追加します。

ここでは、Staff クラスは、商品が売れるたびにその陳列棚の残りの商品数を表示します。

Staff クラスを作成し、また、必要があれば陳列棚である Shelf クラスも改修しなさい。ただし、Shelf クラスは他のクラスからも利用できるようにしなさい。

情報を表示するクラスも2つとは限りません。クラスの数が増えても Shelf クラスを変更しなくてもよいようにしなさい。


実行結果
陳列棚Bは残り4個です。
陳列棚Bは残り0個です。
陳列棚Bに陳列棚Eから25個商品を補充しました。
陳列棚Bは残り21個です。
陳列棚Bは残り14個です。

:

陳列棚Bは残り0個です。
陳列棚Bに陳列棚Aから1個商品を補充しました。
陳列棚Eは残り0個です。
陳列棚Eに陳列棚Cから1個商品を補充しました。
陳列棚Cは残り0個です。
陳列棚Cは売り切れました。
陳列棚Bは残り0個です。
陳列棚Bは売り切れました。
陳列棚Aは残り0個です。
陳列棚Aは売り切れました。
陳列棚Dは残り0個です。
陳列棚Dは売り切れました。
陳列棚Eは残り0個です。
すべて売り切れました。


コード

Enshu402.java
public class Enshu402 { private Shelf[] shelfList = { new Shelf("陳列棚A", 30), new Shelf("陳列棚B", 10), new Shelf("陳列棚C", 20), new Shelf("陳列棚D", 20), new Shelf("陳列棚E", 50) }; // 陳列棚(名前、商品数)5台 public static void main(String[] args) { Enshu402 en = new Enshu402(); en.exec(); } public void exec() { Manager manager = new Manager(shelfList); // 売り場主任 Staff staff = new Staff(); // 売り場担当者 for (int i = 0 ; i < shelfList.length ; i++) { shelfList[i].setNotification(staff); // 売り場担当者を通知先にする shelfList[i].setNotification(manager); // 売り場主任を通知先にする } Customer customer = new Customer(shelfList); customer.start(); // Customer クラスの開始 try { customer.join(); // Customer クラスの終了を待つ } catch(InterruptedException e) {} } }






演習問題4-2 (Observer)