Ohjelmointi

Työskentely Adapterin suunnittelukuvion kanssa

Suunnittelumallit ovat ratkaisuja toistuviin ongelmiin ja monimutkaisuuteen ohjelmistosuunnittelussa. Suunnittelumallit luokitellaan luova, rakenteellinen tai käyttäytyminen. Luovuusmalleja käytetään luokkaesimerkkien luomisen mekanismin luomiseen ja hallintaan. Rakennemalleja käytetään yksiköiden välisten suhteiden toteuttamiseen. Käyttäytymissuunnittelumallit käsittelevät objektiyhteistyötä ja vastuiden delegointia.

Adapteri-malli on rakennesuunnittelukuvio, joka toimii siltana kahden yhteensopimattoman rajapinnan välillä. Termiä "sovitin" käytetään kuvaamaan kohdetta, joka mahdollistaa kahden keskenään yhteensopimattoman rajapinnan kommunikoinnin ja yhteistyön. Pohjimmiltaan Adapter-malli antaa luokille (joilla on yhteensopimattomat rajapinnat) työskennellä yhdessä ja niiden objektit kommunikoivat tarvittaessa.

On olemassa tietyntyyppisiä sovittimia, jotka toteuttavat sekä Targetin että Adapteen liitännät. Tällaisia ​​sovittimia kutsutaan kaksisuuntaisiksi sovittimiksi. Sinulla on myös kaksi erilaista sovitintyyppiä, nimittäin luokan sovittimet ja objektisovittimet. Vaikka ensimmäinen käyttää perintöä, jälkimmäinen käyttää kokoonpanoa korjaamaan yhteensopimattomuusongelmat suunnittelussa. Voit käyttää sovittimen suunnittelumallia, kun haluat käyttää kolmannen osapuolen kirjastoa, joka ei ole yhteensopiva sovelluksessasi olevien tyyppien kanssa.

Seuraava on luettelo tyyppeistä, jotka osallistuvat tyypilliseen sovitinmallin toteutukseen:

  • Kohde
  • Sovitin
  • Sopeutunut
  • Asiakas

Ymmärretään tämä esimerkillä. Oletetaan, että kahden eri kieltä puhuvan ja ymmärtävän ihmisen täytyy kommunikoida - toinen voi olla ranska ja toinen saksalainen. Joten nämä kaksi henkilöä voivat puhua ja ymmärtää vain ranskaa ja saksaa - ei molempia. Tarvitset tyypillisesti jonkun (tulkin), joka tuntee molemmat kielet viestinnän helpottamiseksi. Joten henkilö, joka voi helpottaa tätä viestintää, toimii sovittimena.

Tämä malli kuuluu rakenteelliseen luokkaan, koska käyttäisit tätä mallia sovelluksemme tyyppien jäsentämiseen - tyypillisesti tämä kuvio voi muuttaa yhden rajapinnan toiseen. Neljän joukko määrittelee sovittimen mallin seuraavasti: "Muunna luokan käyttöliittymä toiseksi käyttöliittymäksi, jonka asiakkaat odottavat. Sovitin antaa luokkien toimia yhdessä, mikä ei muuten olisi yhteensopimattomien rajapintojen takia mahdollista".

Kaivetaan nyt koodiin. Harkitse seuraavia kahta luokkaa.

julkisen luokan kohde A

            {

julkinen mitätön DisplayA ()

                {

Console.WriteLine ("KohdeA");

                }

            }

julkisen luokan kohdeB

            {

julkinen mitätön DisplayB ()

                {

Console.WriteLine ("KohdeB");

                }

            }

Kuten näette, nämä kaksi luokkaa eivät ole yhteensopivia - niillä ei ole myöskään yhteistä tukikohdaa. Seuraava koodiluettelo näyttää, miltä sovitinluokat näyttävät.

julkinen käyttöliittymä ITargetAdapter

            {

mitätöi ProcessData ();

            }

julkisen luokan sovitin A: ITargetAdapter

            {

public TargetA targetA {get; aseta; }

julkinen mitätöinti ()

                 {

targetA.DisplayA ();

                 }

julkinen sovitin A (TargetA obj)

                 {

kohdeA = obj;

                 }

            }

julkisen luokan sovitin B: ITargetAdapter

            {

public TargetB targetB {get; aseta; }

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

julkinen sovitin B (TarB-obj)

                 {

kohdeB = obj;

                 }

            }

Huomaa, että molemmilla sovitinluokilla on yksi yhteinen käyttöliittymä nimeltä ITargetAdapter, jonka nämä luokat toteuttavat. Kummassakin adapteriluokassa on argumenttirakentaja, joka hyväksyy viittauksen vastaavien kohdeluokkien objektiin. ITargetAdapter-käyttöliittymä sisältää Process () -metodin ilmoituksen. Tämän menetelmän toteuttavat sekä sovitinluokat - nämä menetelmät kutsuvat näyttöön () ja vastaaviin aiemmin käyttämiemme kohdeluokkien näyttötapoihin.

Seuraava koodiluettelo kuvaa, kuinka voit käyttää näitä sovitinluokkia.

luokan ohjelma

    {

staattinen void Main (merkkijono [] args)

        {

ITargetAdapter-sovitin = uusi AdapterA (uusi TargetA ());

sovitin. prosessi ();

adapteri = uusi sovitinB (uusi kohdeB ());

sovitin. prosessi ();

Konsoli.Lue ();

        }

Kuten yllä olevasta koodinpätkästä näet, meidän on välitettävä vastaavan kohdeluokan ilmentymä sovitinluokan rakentajalle.

Esittelen keskusteluja lisää suunnittelumalleista tulevissa viesteissäni täällä. Sovittimen suunnittelumalli voi olla hyvä valinta, kun sinun on käytettävä vanhaa koodia sovelluksissasi. Voit oppia lisää Adapterin suunnittelumallista tästä artikkelista.