Programovanie

Práca s návrhovým vzorom adaptéra

Dizajnové vzory sú riešením opakujúcich sa problémov a zložitostí v softvérovom dizajne. Dizajnové vzory sú kategorizované ako tvorivé, štrukturálne alebo behaviorálne. Tvorivé vzory sa používajú na vytvorenie a správu mechanizmu vytvárania inštancií tried. Štrukturálne vzory sa používajú na realizáciu vzťahov medzi entitami. Behaviorálne návrhové vzory sa zaoberajú spoluprácou na objektoch a delegovaním zodpovednosti.

Vzor adaptéra je vzor konštrukčného návrhu, ktorý slúži ako most medzi dvoma nekompatibilnými rozhraniami. Pojem „adaptér“ sa používa na označenie objektu, ktorý umožňuje komunikáciu a spoluprácu dvoch vzájomne nekompatibilných rozhraní. V podstate vzor adaptéra umožňuje triedam (ktoré majú nekompatibilné rozhrania) spolupracovať a ich objekty v prípade potreby komunikovať.

Existujú určité typy adaptérov, ktoré implementujú rozhrania terča aj adaptéra. Takéto typy adaptérov sú známe ako obojsmerné adaptéry. Máte tiež dva odlišné typy adaptérov, a to Class Adapters a Object Adapters. Zatiaľ čo prvý používa dedičstvo, druhý používa zloženie na odstránenie problémov s nekompatibilitou vo vašich dizajnoch. Návrhový vzor adaptéra môžete použiť, keď potrebujete použiť knižnicu tretej strany, ktorá nie je kompatibilná s typmi, ktoré máte v aplikácii.

Nasleduje zoznam typov, ktoré sa podieľajú na typickej implementácii vzoru adaptéra:

  • Cieľ
  • Adaptér
  • Príjemca
  • Zákazník

Poďme to pochopiť na príklade. Predpokladajme, že dvaja ľudia, ktorí hovoria rôznymi jazykmi a rozumejú im, musia komunikovať - ​​jedným môže byť francúzština a druhým nemčina. Tieto dve osoby teda môžu hovoriť a rozumieť iba francúzsky a nemecky, nie obidve. Na uľahčenie komunikácie by ste zvyčajne potrebovali niekoho (tlmočníka), ktorý ovláda obidva tieto jazyky. Osoba, ktorá môže uľahčiť túto komunikáciu, teda koná ako adaptér.

Tento vzor spadá do štrukturálnej kategórie, pretože tento vzor by ste použili na štruktúrovanie typov v našej aplikácii - tento vzor zvyčajne dokáže transformovať jedno rozhranie na druhé. Gang of Four definuje vzor adaptéra ako „Premeniť rozhranie triedy na iné rozhranie, ktoré klienti očakávajú. Adaptér umožňuje triedam spolupracovať, čo by inak kvôli nekompatibilným rozhraniam nemohlo fungovať.“

Poďme teraz kopať do nejakého kódu. Zvážte nasledujúce dve triedy.

verejná trieda TargetA

            {

public void DisplayA ()

                {

Console.WriteLine ("TargetA");

                }

            }

verejná trieda TargetB

            {

public void DisplayB ()

                {

Console.WriteLine ("TargetB");

                }

            }

Ako vidíte, tieto dve triedy sú nekompatibilné - takisto nemajú spoločný základ. Nasledujúci zoznam kódov ukazuje, ako vyzerajú triedy adaptérov.

verejné rozhranie ITargetAdapter

            {

void ProcessData ();

            }

public class AdapterA: ITargetAdapter

            {

public TargetA targetA {get; sada; }

public void Process ()

                 {

targetA.DisplayA ();

                 }

public AdapterA (TargetA obj)

                 {

targetA = obj;

                 }

            }

verejná trieda AdapterB: ITargetAdapter

            {

public TargetB targetB {get; sada; }

public void Process () {targetB.DisplayB (); }

public AdapterB (TargetB obj)

                 {

targetB = obj;

                 }

            }

Upozorňujeme, že obe triedy adaptérov majú jedno spoločné rozhranie s názvom ITargetAdapter, ktoré tieto triedy implementujú. Každá z dvoch tried adaptérov má konštruktor argumentov, ktorý prijíma odkaz na objekt príslušných cieľových tried. Rozhranie ITargetAdapter obsahuje deklaráciu metódy Process (). Túto metódu implementujú obidve triedy adaptérov - tieto metódy vyvolávajú Display () a príslušné metódy zobrazenia cieľových tried, ktoré sme implementovali skôr.

Nasledujúci zoznam kódov ilustruje, ako môžete tieto triedy adaptérov používať.

triedny program

    {

static void Main (reťazec [] args)

        {

ITargetAdapter adaptér = nový adaptérA (nový TargetA ());

adaptér.Proces ();

adaptér = nový adaptér B (nový TargetB ());

adaptér.Proces ();

Console.Read ();

        }

Ako vidíte vo vyššie uvedenom útržku kódu, musíme konštruktorovi triedy adaptéra odovzdať inštanciu príslušnej cieľovej triedy.

Tu vo svojich pripravovaných príspevkoch predstavím diskusie o ďalších dizajnových vzoroch. Návrhový vzor adaptéra môže byť dobrou voľbou, keď potrebujete vo svojich aplikáciách vyvolať starší kód. Viac o dizajnovom vzore adaptéra sa dozviete z tohto článku.

$config[zx-auto] not found$config[zx-overlay] not found