všetky vzory

Marker

Označí triedu prázdnym rozhraním, podľa ktorého sa dá rozhodovať za behu.

// An empty marker. It has no method at all — it carries only membership.class Backupable {} class Document extends Backupable {  constructor(text) {    super();    this.text = text;  }} class Image extends Backupable {  constructor(pixels) {    super();    this.pixels = pixels;  }} class TempData {  constructor(value) {    this.value = value;  }} class BackupService {  backup(items) {    for (const item of items) {      if (item instanceof Backupable) {        this.save(item);      }    }  }} new BackupService().backup([  new Document('contract'),  new Image(pixels),  new TempData(42),   // not marked, gets skipped]);

Celý priebeh v texte (11 krokov)
  1. Backupable je prázdne označenie. Nemá ani jednu metódu — nehovorí, čo trieda vie, iba to, že patrí do jednej skupiny.
  2. Document ho dedí. Nezískal tým žiadnu schopnosť, len príslušnosť.
  3. Image tiež.
  4. TempData nie — k označeniu z nej nevedie čiara. A to je celá informácia, ktorú vzor nesie; nič viac v ňom nie je.
  5. Zálohovač prejde všetko, čo dostal. Prvý na rade je Document — a nepýta sa ho na nič, iba či do skupiny patrí.
  6. Patrí, takže sa zálohuje.
  7. Druhý je Image. Tá istá otázka.
  8. Patrí tiež, hoci s dokumentom nemá spoločné vôbec nič — ani jednu metódu, ani jeden údaj.
  9. Tretie sú TempData. Tá istá otázka po tretí raz.
  10. Označenie nemajú, takže sa nevracia nič. Zálohovač ich preskočil a nemusel o nich vedieť vôbec nič — stačilo, kam patria.
  11. Rozhodlo sa podľa toho, kto označenie dedí, nie podľa toho, čo trieda vie. Označenie samo nerobí nič — a to je zároveň jeho slabina: nič nevynucuje a odobrať sa nedá.

Kedy použiť

  • Skupina tried má spoločnú vlastnosť, nie spoločné správanie — metódou sa to vyjadriť nedá.
  • Rozhodnutie padá za behu podľa typu a zoznam skupiny netreba udržiavať nikde inde.
  • Príslušnosť kontroluje prekladač, nie zoznam mien — preklep v type neprejde.
  • Autor triedy pridá označenie a knižnica sa podľa neho zariadi bez ďalšej konfigurácie.

Pasce

  • Prázdne označenie nič nevynucuje — trieda ho môže dediť a sľub nesplniť.
  • Potomok zdedí označenie automaticky a stane sa členom skupiny bez rozhodnutia.
  • Odobrať sa nedá — kto má zo skupiny vypadnúť, vyžiada si prestavbu hierarchie.
  • Každé miesto s otázkou „patrí sem?" je vetva, ktorá by inak bola volaním metódy.
  • Bez viacnásobného dedenia minie označenie jediné miesto v hierarchii.
  • Rozhranie hovorí, čo trieda vie; označenie, kam patrí. Prvá metóda v ňom označenie ruší.
  • Anotácie a atribúty unesú aj údaje a nemíňajú dedenie — dnes zvyčajne lepšia voľba.