Template Method
The template method pattern allows implementing algorithm skeletons in a superclass with abstract method variants in subclasses. Examples include InputStream's read method in Java. Avoid code repetition by refactoring to generalized classes and controlling subclass extensions with declared hooks.
Template Method
E N D
Presentation Transcript
TemplateMethod Variasjoner i subklasser
Prinsippskisse • Prinsippskissen er meget enkel • En abstrakt klasse har en konkret metode og en abstrakt metode • Hver subklasse realiserer den abstrakte metoden på hver sin måte
Algoritmer med variasjoner • En algoritme kan skrives ferdig med alle metodekall • Men ett eller flere metodekall kan være abstrakte • Abstrakte metoder gjøres ferdige i subklasser • Et eksempel på dette er metoden read i Javas rammeverk
Metoden read • Metoden read behandler IO svært forskjellig i ulike subklasser • Klassen InputStream definerer read abstrakt • Dermed kan InputStream definere to viktige metoder helt ferdig • read(byte[] b) • read(byte[] b, int off, int len) • Begge metodene kan utnytte array.length og indekser for å bygge den nødvendige løkken med kall til den abstrakte metoden read.
Subklasser med read • ByteArrayInputStream(prosjekt 5 og 7) lar read lese fra en strøm basert på en Decorator. • FileInputStream konfigurer et objekt som leser direkte i et filsystem • FilterInputStream bruker en annen InputStream og transformerer dataene • SubklassenFilterInputStream kan for eksempel vedlikeholde linjenummer • AudioInputStream formaterer read-data som spesifiserte audioformater og bufferlengde
Fast sekvens • TemplateMethod viser hvordan vi kan bruke samme algoritme for ulike typer • Mønsteret kan brukes når sekvensen i algoritmen ikke er avhengig av typen • To eksempler på TemplateMethod i prosjekter • Klassen ConfigModel bruker TemplateMethod i begge sine sekvenser (programkode 52) • Klassen Figuremodel i metoden newInstance (programkode 89) • Klassen Element med metodene isHot og traceResult? • Diskusjoner med utgangspunkt i mønstre øker kunnskap om kode og programdesign
GoFapplicability list • Implementere faste deler av en algoritme en gang og la subklasser definere variasjonene • Unngå repetisjon av kode ved å refaktorere til generaliserte klasser. • Metodikken er å gjenfinne all lik kode i klasser med samme grunnleggende ansvar, og flytte den til en superklasse • Kontroll med subklassenes utvidelser ved å deklarere lovlige ”hooks” • (Som brukes i Eclipseplugin-teknologi, selvsagt ukjent for GoF i 1995)