"Szervusz, Amigo! Ma elmesélem, hogy pontosan mi is az " adapter ". Remélem, hogy miután megismerted ezt a témát, sokkal jobban megérted a bemeneti/kimeneti adatfolyamokat."

Képzeld el, hogy a programod két keretrendszert használ, amelyeket más programozók/cégek írtak. Mindkét keretrendszer nagyon jó, és OOP elveket használ: absztrakció, polimorfizmus, beágyazás. Együtt szinte teljesen lefedik azt, amit a programnak tennie kell. Egy egyszerű feladat vár rád. Az egyik keretrendszer által létrehozott objektumokat át kell adnia a másik keretrendszernek. De a két keretrendszer teljesen más és "nem tudnak egymásról", azaz nincs közös osztályuk. Valahogy át kell alakítani az egyik keretrendszer objektumait a másik objektumaivá.
Ezt a feladatot szépen meg lehet oldani az „ adapter ” technika (tervezési minta) alkalmazásával :
Java kód | Leírás |
---|---|
|
Ez tükrözi az adapter tervezési mintáját.
Az alapötlet az, hogy a MyClass osztály egyik interfészt a másikra konvertálja (adaptálja). |
– Mondana egy konkrétabb példát?
"OK. Tegyük fel, hogy minden keretrendszernek megvan a saját egyedi "lista" felülete. Valahogy így nézhetnek ki:
Java kód | Leírás |
---|---|
|
Kód az első ( Alpha ) keretrendszerből
Az AlphaList az egyik olyan interfész, amely lehetővé teszi, hogy a keretkód kölcsönhatásba lépjen a keretrendszert használó kóddal. |
|
AlphaList Manager Az AlphaListManager egy osztály a keretrendszerben. A createList metódusa létrehoz egy AlphaList objektumot |
|
Kód a második ( Béta ) keretrendszerből.
A BetaList az egyik interfész, amely lehetővé teszi, hogy a keretkód kölcsönhatásba lépjen a keretrendszert használó kóddal. A BetaSaveManager egy osztály a keretrendszerben. A saveList metódusa BetaList objektumotmentel |
|
«Adapter» osztály, amely az AlphaList felületről a BetaList felületre konvertál
A ListAdapter osztály a BetaList felületet valósítja meg a második keretrendszerből. Amikor valaki meghívja ezeket a metódusokat, az osztálykód «továbbküldi» a hívásokat a listaváltozóhoz , amely az első keretrendszerből származó AlphaList . Egy AlphaList objektum átadásra kerül a ListAdapter konstruktornak A setSize metódus a következő szabályok szerint működik: ha növelni kell a lista méretét, adjunk hozzá üres (null) elemeket. Ha a lista méretét csökkenteni kell, törölje a végén lévő elemeket. |
|
Példa arra, hogyan lehet használni |
"Az utolsó példád tetszett a legjobban. Nagyon tömör és érthető."
GO TO FULL VERSION