"Hei, Amigo! I dag fortalte Ellie deg om adaptermønsteret."

De fleste klasser relatert til I/O-strømmer er implementert som adaptere. De konverterer enten tilsvarende grensesnitt, eller de kobler dem sammen, fra det enkle og videre til det komplekse.

"Er InputStreamReader og BufferedReader også adaptere? I det minste ligner de veldig på adaptere i måten de brukes på: Etter at et objekt er opprettet, sendes det til konstruktøren til en annen klasse."

"Ja, InputStreamReader konverterer InputStream- grensesnittet til Reader- grensesnittet. BufferedReader er ikke en adapter i sin reneste form, fordi Javas skapere bestemte seg for ikke å gi metodene deres eget grensesnitt. Men det er en slektning."

I stedet for å skrive en basillion forskjellige klasser, skrev Javas skapere to dusin adaptere og lot dem koble seg til hverandre slik en programmerer måtte ønske.

Denne tilnærmingen er veldig praktisk. En programmerer kan alltid skrive klassen og/eller adapteren sin, få den til å implementere et standardgrensesnitt og inkludere den i kjeden av adapterobjekter hun bygger.

"Så det er slik det hele fungerer. I stedet for store komplekse klasser lager vi kjeder av enkle objekter og adaptere. Og så lager du dem bare og kombinerer dem i riktig rekkefølge!"

"Og du implementerer det som mangler."

"Ja jeg forstår."

"Men egentlig ville jeg fortelle deg om Reader og Writer i dag. Dette er to abstrakte klasser som ligner veldig på InputStream- og OutputStream-klassene. Men i motsetning til disse klassene, jobber disse to klassene med tegn. De leser og skriver tegn. De er veldig praktisk når du arbeider med tekstinformasjon. La oss ta en titt på metodene de har:"

Lesermetoder Hva metoden gjør
int read(char[] cbuf);
"Denne metoden leser umiddelbart flere tegn inn i bufferen ( char array ), til bufferen er full eller til kilden ikke har flere tegn å lese."
Metoden returnerer antallet tegn som faktisk er lest (som kan være mindre enn lengden på matrisen)
int read();
"Denne metoden leser ett tegn og returnerer det. Resultatet utvides til en int for utseende. Hvis det ikke er noen tilgjengelige tegn, returnerer metoden -1."
boolean ready();
Denne metoden returnerer sann hvis det er noen uleste tegn for lesemetodene
void close();
Denne metoden «lukker» strømmen. Du kaller dette når du er ferdig med å jobbe med strømmen.
Objektet utfører deretter rengjøringsoperasjonene som trengs for å lukke filen osv.
På dette tidspunktet kan du ikke lese flere data fra strømmen.

"Det viser seg at Readers read(char [] cbuf) -metode lar oss lese hele blokker med tegn, i stedet for ett tegn om gangen. Så det er raskere og mer praktisk."

"Akkurat. Og la oss nå se hvilke metoder Writer har:"

Metode Hva metoden gjør
void write(int c);
Denne metoden skriver ett tegn. Int-typen er innsnevret til en char. Den ekstra delen kastes ganske enkelt.
void write(char[] cbuff);
Denne metoden skriver en rekke tegn.
void write(String s);
Denne metoden skriver en streng. Den konverteres ganske enkelt til en rekke tegn og deretter kalles den andre metoden.
void flush();
Hvis strømmen internt lagrer data som ennå ikke er skrevet, tvinger denne metoden til å skrives.
void close();
Denne metoden «lukker» strømmen. Du kaller dette når du er ferdig med å jobbe med strømmen.
Objektet utfører deretter rengjøringsoperasjonene som trengs for å lukke filen osv. Du kan ikke lenger skrive data til strømmen, og flush kalles automatisk.

Det er viktig å forstå at Leser og Forfatter er abstrakte klasser. De gjør ingenting og inneholder praktisk talt ingen kode. Alle metodene deres må implementeres i klassene som arver dem. Jobben deres er å standardisere hvordan klasser samhandler . Utviklere trenger ikke å finne opp sine egne standarder for å samhandle med hverandre. Det er mye mer praktisk for alle å opprettholde noen få grunnleggende standarder. Dette gjør at klasser skrevet av forskjellige programmerere enkelt kan samhandle ikke bare med klasser skrevet av Javas skapere, men også med klasser skrevet av andre programmerere.

Standarder er kraftige.

"Jeg er enig. Å støtte felles standarder er fordelaktig for alle."