"Hej, Amigo! Idag ska jag berätta vad en " adapter " är. Jag hoppas att du efter att ha lärt dig om detta ämne kommer att ha en mycket bättre förståelse för in-/utgångsströmmar."
Föreställ dig att ditt program använder två ramverk skrivna av andra programmerare/företag. Båda ramverken är mycket bra och använder OOP-principer: abstraktion, polymorfism, inkapsling. Tillsammans täcker de nästan helt vad ditt program behöver göra. Du har en enkel uppgift kvar. Du måste skicka objekt skapade av ett ramverk till det andra ramverket. Men båda ramarna är helt olika och "vet inte om varandra", dvs de har inga klasser gemensamma. Du måste på något sätt konvertera objekten i en ram till objekt i den andra.
Denna uppgift kan lösas vackert genom att tillämpa " adapter "-tekniken (designmönster):
Java-kod | Beskrivning |
---|---|
|
Detta återspeglar adapterns designmönster.
Grundtanken är att klassen MyClass konverterar (anpassar) det ena gränssnittet till det andra. |
"Kan du ge mig ett mer specifikt exempel?"
"OK. Låt oss säga att varje ramverk har sitt eget unika "list"-gränssnitt. De kan se ut ungefär så här:"
Java-kod | Beskrivning |
---|---|
|
Kod från det första ( Alpha ) ramverket
AlphaList är ett av gränssnitten som gör att ramkoden kan interagera med koden som använder ramverket. |
|
AlphaList Manager AlphaListManager är en klass i ramverket. Dess createList-metod skapar ett AlphaList- objekt |
|
Kod från det andra ( Beta ) ramverket.
BetaList är ett av gränssnitten som gör att ramkoden kan interagera med koden som använder ramverket. BetaSaveManager är en klass i ramverket. Dess saveList- metod sparar ett BetaList- objekt |
|
Klassen «Adapter» som konverterar från AlphaList -gränssnittet till BetaList -gränssnittet
ListAdapter - klassen implementerar BetaList- gränssnittet från det andra ramverket. När någon anropar dessa metoder, "vidarebefordrar" klasskoden anropen till listvariabeln, som är en AlphaList från det första ramverket. Ett AlphaList- objekt skickas till ListAdapter -konstruktorn Metoden setSize fungerar enligt följande regler: om storleken på listan måste ökas, lägg till tomma (null) objekt. Om storleken på listan behöver minskas, radera objekt i slutet. |
|
Ett exempel på hur det kan användas |
"Jag gillade ditt sista exempel mest av allt. Mycket kortfattat och begripligt."
GO TO FULL VERSION