Memento Object Behavioral Design Pattern
Lagre og hente tilstander • Et system inneholder ofte mekanismer som trenger gjenbruk av tilstander • Memento viser hvordan et objekt kan gjenopprette en tidligere tilstand • Mønsteret forutsetter bruk av to hjelpeklasser • Derfor beskriver mønsteret tre ulike roller
Tre roller til Memento • Originator – Dette er hovedrollen i mekanismen som trenger gjenbruk av tilstander – Denne rollen sørger for å bygge instanser som kapsler inn tilstanden • Memento – Denne rollen bevarer tilstanden – Rollen har et bredt interface mot Originator og et smalt interface mot Caretaker • Caretaker – Caretaker organiserer og kontrollerer tilgang til instanser av memento – Caretaker vet ingen ting om innholdet i memento
Prinsippskisse • Originator og Caretaker har ingen strukturell kobling
GoF applicability list • Memento kan vurderes når – Det er behov for gjenbruk av et objekts tilstand eller deltilstand – Og når samtidig et direkte grensesnitt ville eksponert detaljer som bør være innkapslet • Fra konsekvenslisten finner vi – at tilstanden må lagres utenfor originator – at tilstanden ikke må kreve for store ressurser
Fra GoFs konsekvensliste • Andre objekter beskyttes mot sammensatte detaljer i originator • Originator forenkles ved å unnslippe ansvaret for administrering av andre tilstander • Memento som krever ressurser kan vurdere å lagre kun inkrementelle endringer • Caretaker skal administrere Memento, herunder ”gc”, men uten å vite hva innholdet er
Prosjekt 10 • Klassen Direction i prosjekt 10 sørger for at et annet objekt veksler regelmessig mellom tilstander • Er dette en redusert instans av Memento?