Passenger
s和Taxi
s在不同的線程中獨立運行。經過Edwin Buck的大力幫助here我使用MVC進行出租車管理。在我的情況下(JTaxiPanel
)和模型(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)
{
}
}
如果我理解正確,你基本上建議使用至少2套監聽器,比如'viewListeners'和'modelListeners'?但是這會將'view'耦合到'model',是嗎? – theateist
你能幫我嗎? – theateist
不得不查看和模型監聽器。相反,模型組件向不同的偵聽器集發送不同的消息類型。對於你的問題,你沒有充分說明好例子。對於你提供的情況,你可以有一個「SinglePassengerNotify」事件/聽衆列表,當乘客進入或離開時,只有該乘客被通知。您還可以通過「AllPassengerInTaxiNotify」活動/聽衆名單通知乘客出租車已損壞等。 – Gene