Задатак — Систем обавештавања

← Недеља 6

Потребно је моделовати једноставан систем за слање подсетника.

Подсетник има:

  • текст поруке;
  • примаоца;
  • канал преко кога се порука шаље.

Дефинисати интерфејс:

public interface KanalObavestavanja {
    boolean posalji(String primalac, String poruka);
}

Направити најмање следеће имплементације:

  • SmsKanal;
  • ImejlKanal;
  • AplikacijaKanal.

За потребе задатка није потребно стварно слати SMS или имејл. Довољно је да метода испише шта би било послато и врати true.

Класа Podsetnik

Podsetnik треба да има поље:

private KanalObavestavanja kanal;

и да слање делегира том објекту.

На пример:

podsetnik.posalji();

не треба да садржи гранање:

if (tipKanala == ...) {
    ...
}

Захтеви

  1. Podsetnik не сме да зависи од конкретних класа SmsKanal, ImejlKanal или AplikacijaKanal.
  2. Канал се прослеђује кроз конструктор.
  3. Омогућити промену канала након креирања подсетника.
  4. У Main послати исту поруку преко најмање два различита канала.
  5. Додати нову имплементацију StampanoPismoKanal без измене класе Podsetnik.

Додатак

Дефинисати још један интерфејс:

public interface ZahtevaInternet {
    boolean imaInternet();
}

Нека га имплементирају само канали којима је интернет заиста потребан.

Размислити:

  • зашто SmsKanal и ImejlKanal не морају да имају заједничку базну класу само зато што оба шаљу поруке;
  • зашто је корисно да Podsetnik зна само за KanalObavestavanja;
  • колико се мења постојећи код када додамо потпуно нови канал.

Самостални део — Извоз извештаја

Систем треба да проследи текст извештаја различитим одредиштима. За сада симулирати исписом у конзолу: екран и штампач. Клијент бира одредиште без провере конкретне класе.

Критеријум провере: Додати треће одредиште без измене клијента. Написати уговор за null и празан текст; не уводити стварни рад са фајлом пре недеље 11.

Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу нису задати називи класа или обавезни обрасци; образложено једноставније решење је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.