Programiranje

Delo z vzorcem zasnove adapterja

Vzorci oblikovanja so rešitve za ponavljajoče se težave in zapletenosti pri oblikovanju programske opreme. Vzorci oblikovanja so kategorizirani kot kreativni, strukturni ali vedenjski. Ustvarjalni vzorci se uporabljajo za ustvarjanje in upravljanje mehanizma ustvarjanja primerkov razredov. Strukturni vzorci se uporabljajo za uresničevanje odnosov med entitetami. Vzorčni vzorci oblikovanja vedenja se ukvarjajo s sodelovanjem objektov in prenosom odgovornosti.

Vzorec adapterja je vzorec strukturne zasnove, ki deluje kot most med dvema nezdružljivima vmesnikoma. Izraz "adapter" se uporablja za predstavitev predmeta, ki omogoča medsebojno nezdružljiva vmesnika za komunikacijo in sodelovanje. V bistvu vzorec adapterja omogoča, da razredi (ki imajo nezdružljive vmesnike) delujejo skupaj, njihovi predmeti pa po potrebi komunicirajo.

Obstajajo nekatere vrste vmesnikov, ki izvajajo vmesnike Target in Adaptee. Takšne vrste adapterjev so znane kot dvosmerni adapterji. Na voljo imate tudi dve različni vrsti adapterjev, in sicer Class Class in Object Adapters. Medtem ko prvi uporablja dedovanje, drugi z uporabo sestave odpravi težave z nezdružljivostjo v vaših modelih. Vzorec zasnove adapterja lahko uporabite, kadar morate uporabiti knjižnico drugega proizvajalca, ki ni združljiva s tipi, ki jih imate v svoji aplikaciji.

Sledi seznam vrst, ki sodelujejo pri tipični izvedbi vzorca adapterja:

  • Cilj
  • Adapter
  • Prilagojeni
  • Naročnik

Razumimo to na primeru. Recimo, da morata komunicirati dve osebi, ki govorita in razumeta različne jezike - eden je lahko francoski, drugi pa nemški. Ti dve osebi lahko govorita in razumeta samo francosko oziroma nemško - ne obeh. Za lažjo komunikacijo običajno potrebujete nekoga (tolmača), ki zna oba jezika. Torej, oseba, ki lahko olajša to komunikacijo, deluje kot adapter.

Ta vzorec spada v strukturno kategorijo, saj bi ga uporabili za strukturiranje tipov v naši aplikaciji - običajno lahko ta vzorec pretvori en vmesnik v drugega. Skupina štirih opredeli vzorec vmesnika kot "Pretvori vmesnik razreda v drug vmesnik, ki ga stranke pričakujejo. Vmesnik omogoča, da razredi delujejo skupaj, drugače pa zaradi nezdružljivih vmesnikov."

Poglejmo zdaj nekaj kode. Upoštevajte naslednja dva razreda.

javni razred TargetA

            {

javna void DisplayA ()

                {

Console.WriteLine ("TargetA");

                }

            }

javni razred TargetB

            {

javna void DisplayB ()

                {

Console.WriteLine ("TargetB");

                }

            }

Kot lahko vidite, sta oba razreda nezdružljiva - nimata niti skupne osnove. Naslednji seznam kod prikazuje, kako izgledajo razredi adapterjev.

javni vmesnik ITargetAdapter

            {

void ProcessData ();

            }

javni razred AdapterA: ITargetAdapter

            {

javni TargetA targetA {get; set; }

postopek javne neveljavnosti ()

                 {

targetA.DisplayA ();

                 }

javni AdapterA (TargetA obj)

                 {

targetA = obj;

                 }

            }

javni razred AdapterB: ITargetAdapter

            {

javni TargetB targetB {get; set; }

postopek javne void () {targetB.DisplayB (); }

javni AdapterB (TargetB obj)

                 {

targetB = obj;

                 }

            }

Upoštevajte, da imata oba razreda vmesnikov en skupni vmesnik z imenom ITargetAdapter, ki ga ti razredi izvajajo. Vsak od obeh razredov vmesnikov ima konstruktor argumentov, ki sprejme sklic na objekt ustreznih ciljnih razredov. Vmesnik ITargetAdapter vsebuje izjavo metode Process (). To metodo izvajata oba razreda adapterjev - ti metodi prikličeta Display () in ustrezne metode prikaza ciljnih razredov, ki smo jih prej implementirali.

Naslednji seznam kod ponazarja, kako lahko uporabljate te razrede vmesnikov.

razredni program

    {

statična praznina Main (string [] args)

        {

Adapter ITargetAdapter = nov AdapterA (nov TargetA ());

adapter.Process ();

adapter = nov AdapterB (nov TargetB ());

adapter.Process ();

Console.Read ();

        }

Kot lahko vidite v zgornjem delčku kode, moramo primerek ustreznega ciljnega razreda posredovati konstruktorju razreda adapterja.

Razprave o več vzorcih oblikovanja bom predstavil v naslednjih objavah tukaj. Vzorec zasnove adapterja je lahko dobra izbira, kadar bi morali v svojih aplikacijah priklicati staro kodo. Iz tega članka lahko izveste več o vzorcu zasnove adapterja.

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