1

学校の課題として、ゲーム内のインベントリを実装しました。インベントリは、アイテムを含む ArrayList を使用して実装されます。手榴弾、ロケットランチャーなど、さまざまな種類のアイテムがあります。

すべてのアイテムを配列リストに格納できる必要があります。ただし、一部のアイテムには制約があります (例: インベントリには 6 個のグレネードしかありません)。

instanceof の使用は許可されていません。そのため、グレネードをインベントリに追加するビジター パターンを実装し、グレネードには他のアイテムとは異なるリストを使用しました。割り当ての評価中に、すべてのアイテムを同じリストに保存するように言われました。インベントリ内の手榴弾の数を数えることは許可されていません。手榴弾をインベントリに追加する前に、手榴弾の数を数えるべきです。しかし、これを達成する方法がわかりません。

4

2 に答える 2

4

ご想像のとおり、訪問者パターンは正しい選択です。しかし、実装すると、次のようになります: (疑似コード):

interface InventoryVisitor{
    onGrenade(theGrenade);
    onDefaultItem(theItem);
}

class DefaultItem{
    visit(visitor){visitor.onDefaultItem(this);}
}

class Grenade extends DefaultItem{
    visit(visitor){visitor.onGrenade(this);}
}

次に、InventoryList の各項目を InventoryVisitor の実装で呼び出します。visitたとえば、手榴弾の数をカウントし、6 つを超える場合は例外をスローします。

于 2013-04-24T13:54:53.740 に答える
-1

いくつかのインターフェイスがあり、そのインターフェイスで列挙値を返すItemメソッドを使用できると仮定します。getItemType

public enum ItemType {
    Grenade,
    RocketLauncher
}

public interface Item {
    ItemType getItemType();
}

あまり凝ったものではありませんが、少なくともアイテムのタイプを使用せずに尋ねることができinstanceof、訪問者パターンを使用する必要はありません。しかし、パターンは課題の一部だったのでしょうか?

于 2013-04-24T13:56:43.660 に答える