Задатак — Систем обавештавања
Потребно је моделовати једноставан систем за слање подсетника.
Подсетник има:
- текст поруке;
- примаоца;
- канал преко кога се порука шаље.
Дефинисати интерфејс:
public interface KanalObavestavanja {
boolean posalji(String primalac, String poruka);
}
Направити најмање следеће имплементације:
SmsKanal;ImejlKanal;AplikacijaKanal.
За потребе задатка није потребно стварно слати SMS или имејл. Довољно је да метода испише шта би било послато и врати true.
Класа Podsetnik
Podsetnik треба да има поље:
private KanalObavestavanja kanal;
и да слање делегира том објекту.
На пример:
podsetnik.posalji();
не треба да садржи гранање:
if (tipKanala == ...) {
...
}
Захтеви
Podsetnikне сме да зависи од конкретних класаSmsKanal,ImejlKanalилиAplikacijaKanal.- Канал се прослеђује кроз конструктор.
- Омогућити промену канала након креирања подсетника.
- У
Mainпослати исту поруку преко најмање два различита канала. - Додати нову имплементацију
StampanoPismoKanalбез измене класеPodsetnik.
Додатак
Дефинисати још један интерфејс:
public interface ZahtevaInternet {
boolean imaInternet();
}
Нека га имплементирају само канали којима је интернет заиста потребан.
Размислити:
- зашто
SmsKanalиImejlKanalне морају да имају заједничку базну класу само зато што оба шаљу поруке; - зашто је корисно да
Podsetnikзна само заKanalObavestavanja; - колико се мења постојећи код када додамо потпуно нови канал.
Самостални део — Извоз извештаја
Систем треба да проследи текст извештаја различитим одредиштима. За сада симулирати исписом у конзолу: екран и штампач. Клијент бира одредиште без провере конкретне класе.
Критеријум провере: Додати треће одредиште без измене клијента. Написати уговор за null и празан текст; не уводити стварни рад са фајлом пре недеље 11.
Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу
нису задати називи класа или обавезни обрасци; образложено једноставније решење
је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.