長時間のリーダー/初めてのポスター。私はこれがひどい疑問であれば、私はJavaとソフトウェア開発に新しいので、私を許して!異なるオブジェクトタイプに基づいてJavaのリストを変更する場所
私は現在、メンテナンスしているアイテムオブジェクトのリストを持つItemsOrderManagerというクラスを持っています。それをItemsOrderと呼びます。このリストは、ItemsOrderManagerクラスが構築されたときに、正しい順序でいくつかのデフォルト項目でインスタンス化されます。
次に、イベントのHashMapを持つTimelineという別のクラスがあります。このイベントのDateTimeはHashMapのキーです(つまり、HashMap Date、Event)。イベントには、さまざまなことをしたり、互いに少し変わったりして同様のメソッドや属性を共有しているため、EventA、EventB、EventCなどのサブクラスがいくつかあります。
問題はItemsOrderManagerクラスがDateOnderイベントのタイムラインを処理する必要があることです。これらのイベントはItemsOrderリストの変更方法を決定します。これは、リスト内の特定の項目を見つけるようなことを行いますし、その後:いくつかの項目のプロパティ、または
- 変更は、それの後に新しい項目を追加します。
どのようなイベントの種類によって変化しますか?
それはこのようになります:/
はpublic class ItemsOrderManager {
private List<Item> items = new ArrayList<Item>();
private Timeline timeline;
Public ItemsOrderManager() {
initialiseItems(); //add items to the items list
initialiseTimeline(); //for simplicity i put this here to show the timeline gets initialised/we set the events in it and then sort the hashmap
processTimeline(); //again for simplicity just showing we need to then process the timeline which modifies the items list
}
}
だから私の質問は、私はItemsOrderManagerクラスのメソッドを使用してItemsOrderリストを操作する必要がある場合、または私はEventクラスにメソッドを利用するべきですサブクラスはパラメータとしてリストを取り込み、そこで動作しますか?または、これはこれを行う別の方法がありますか?ここで最高のデザインプラクティスは何ですか?
だから、次のいずれか
public void processTimeline() {
for (Event event : timeline.getEvents().values()) {
if (event instanceof EventA) {
//manipulate items list
} else if (event instanceof EventB) {
//manipulate items list in a different way
} else {
//manipulate items list in a different way altogether
}
}
}
または私はこれを行うべきである:
public void processTimeline() {
for (Event event : timeline.getEvents().values()) {
//call something like event.applyEventToList(this.items); to modify the list or returned the modified list
}
}
か良い方法はありますか?その愚かな質問の場合は、事前にお詫び申し上げます。
私はアイテムタイプごとに "マネージャ"を作成し、対応するマネージャオブジェクトをMap ':' managerMap.get(event.class)から取得します。' –
イベントハッシュマップのタイムスタンプ(秒/ミリ秒)をキーとして使用し、このキーセットを取得し、日付順にソートしてこのソート済みリストを使用してイベントリストにアクセスするのはどうですか? –