70 likes | 159 Views
Template Method. 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.
E N D
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)