Passenger
とTaxi
は、異なるスレッドで独立して実行されます。ここで Edwin Buck の大きな助けを借りて、タクシー管理に MVC を使用しました。私の状況では、view( JTaxiPanel
) と models()の両方がPassenger
リッスンしTaxi
ます。Taxi
イベントが発生すると (たとえば、乗客が追加されたときやタクシーが運転を開始したときなど)、すべてのリスナーに通知されます。問題は、Passenger
他の乗客がタクシーに追加されても通知されることです。乗客に聞いてもらいたいのですが、他の乗客が追加さPassenger
れたときなどに通知する必要はないと思います。
この種の問題を処理するにはどうすればよいですか?
タクシーにはリスナーのリストが2つあるはずですか、それとも他の方法がありますか?
class Station extends Thread
{
LinkedList<Taxi> taxisInQueue;
LinkedList<Passenger> passengersInQueue;
void matchPassengerToTaxi()
{
Taxi taxi = taxisInQueue.removeFirst();
Passenger passenger = passengersInQueue.removeFirst();
// passenger listen to taxi
taxi.addListener(passenger);
taxi.addPassenger(passenger);
}
}
class Passenger extends Thread implements TaxiListener
{
@Override
public void taxiChanged(TaxiEvent event)
{
}
}
class Taxi extends Thread
{
Vector<Passenger> passengers;
public void addPassenger(Passenger passenger)
{
passengers.add(passenger);
// notify listeneres
fireEvent(new PassengerAddedEvent(this, passenger));
}
}
class JTaxiPanel extends JPanel implements TaxiListener
{
public JTaxi(Taxi model)
{
this.model = model
// view listens to Taxi
model.addTaxiListener(this);
}
@Override
public void taxiChanged(TaxiEvent event)
{
}
}