Telekanalid
Põhja-Korea juhid tahavad oma 60-tollistest 3D telekatest uudiseid vaadata. Riigis levib ametlikult ainult maailma parim kanal "Põhja-Korea rahvuslikud uudised". Lisaks levitavad mässulised piraat-telejaama "Põhja-Korea maailmauudised", mis edastab kohalikku kanalit ja lisaks ka Fox News uudiseid. Riigipea saab Fox Newsi ka otse oma satelliidi-vastuvõtjast vaadata.
- Loo interface BroadcastListener, kus on meetod
void listen(String)
. - Loo class Broadcaster, kus on meetodid
void subscribe(BroadcastListener)
javoid broadcast(String)
. Broadcaster jätab meelde kõik BroadcastListenerid, mis tallesubscribe
meetodiga ette antakse.broadcast
meetodi kutsumisel tuleb kõigile listeneridele ette antud string edasi anda (listen meetodit kutsuda). - Loo Broadcaster alamklass TVStation. Loo konstruktor, mis võtab parameetriks listi uudistest. Lisa meetod
void sendNews()
, mis broadcastib (ülemklassi meetodi abil) uudiste listist suvalise uudise. - Loo Broadcaster alamklass PirateStation, mis lisaks implementib BroadcastListener. PirateStation võtab teiste jaamade saateid vastu (listen) ja broadcastib need kohe kõigile oma kuulajatele edasi.
- Loo klass TV, mis implementib BroadcastListener. TV konstruktoriga peab määrama omaniku nime. Kõik kohale jõudvad uudised prindi koos TV omaniku nimega System.out-i.
Loo testklass, mis funktsionaalsust testib.
- Loo TVStation objektid "Põhja-Korea rahvuslikud uudised" ja "Fox News" jaoks. Mõlemal on oma erinev uudiste list. Loo PirateStation, mis võtab vastu ja edastab mõlema eelneva uudiseid.
- Loo TV Kim Jong-un jaoks, mis kuulab Fox News ja rahvuslikke uudiseid (otse, mitte läbi piraatkanali).
- Loo TV Kim Yong-nam jaoks, mis kuulab ainult rahvuslikke uudiseid.
- Loo TV Pak Pong-ju jaoks, mis kuulab piraatkanalit (selle kaudu mõlemaid teisi kanaleid).
- Käivita mõlema uudistekanali
sendNews()
ja veendu, et õiged isikud õiged uudiseid kuulevad.
Subscribe/broadcast, addEventListener/fireEvent, addObserver/notify - need kõik on erinevad kujud Observer patternist. See on väga levinud ja kasulik tehnika, mis aitab koodi modulaarsemaks ja taaskasutatavamaks muuta. Mõned näited, kus seda veel kasutatakse:
- Kasutaja klõpsab nupu peale - nupp teeb fireEvent ja kõik EventListenerid saavad reageerida.
- Programm alustab taustaprotsessina faili allalaadimist. Selle lõppedes saavad kõik DownloadObserverid teate, et fail on kasutamiseks valmis.
- Koodikomponent ootab võrgust tulevaid teateid. Vastuvõtja teavitab teda sobiva teate saabumisest.