Programmēšana

Darbs ar adaptera dizaina modeli

Dizaina modeļi ir risinājumi atkārtotām programmatūras projektēšanas problēmām un sarežģītībām. Dizaina modeļi tiek klasificēti kā radošie, strukturālie vai uzvedības. Radošie modeļi tiek izmantoti, lai izveidotu un pārvaldītu klašu gadījumu izveidošanas mehānismu. Strukturālie modeļi tiek izmantoti, lai realizētu attiecības starp entītijām. Uzvedības dizaina modeļi attiecas uz objektu sadarbību un pienākumu deleģēšanu.

Adaptera modelis ir strukturāls dizaina modelis, kas darbojas kā tilts starp divām nesaderīgām saskarnēm. Termins "adapteris" tiek izmantots, lai attēlotu objektu, kas ļauj divām savstarpēji nesaderīgām saskarnēm sazināties un sadarboties. Būtībā Adapter modelis ļauj klasēm (kurām ir nesaderīgas saskarnes) sadarboties, un to objekti, ja nepieciešams, sazinās.

Pastāv noteikta veida adapteri, kas īsteno gan mērķa, gan adaptētā saskarnes. Šādi adapteru veidi ir pazīstami kā divvirzienu adapteri. Jums ir arī divi atšķirīgi adapteru veidi, proti, klases adapteri un objektu adapteri. Kamēr pirmais izmanto mantojumu, otrais izmanto kompozīciju, lai novērstu jūsu dizaina nesaderības problēmas. Adaptera noformējuma modeli varat izmantot, kad jāizmanto trešās puses bibliotēka, kas nav saderīga ar jūsu lietojumprogrammā esošajiem veidiem.

Šis ir to tipu saraksts, kuri piedalās tipiskā adaptera modeļa ieviešanā:

  • Mērķis
  • Adapteris
  • Adaptētais
  • Klients

Sapratīsim to ar piemēru. Pieņemsim, ka diviem cilvēkiem, kuri runā un saprot dažādas valodas, ir jāsazinās - viens var būt franču un otrs vācietis. Tātad šīs divas personas var runāt un saprast tikai attiecīgi franču un vācu valodu - ne abas. Lai atvieglotu saziņu, jums parasti vajadzīgs kāds (tulks), kurš zina abas šīs valodas. Tātad persona, kas var atvieglot šo saziņu, darbojas kā adapteris.

Šis modelis ietilpst strukturālajā kategorijā, jo jūs izmantojat šo modeli, lai strukturētu veidus mūsu lietojumprogrammā - parasti šis modelis var pārveidot vienu saskarni citā. Četru grupa nosaka adaptera modeli kā "Konvertēt klases saskarni citā saskarnē, kuru klienti sagaida. Adapteris ļauj klasēm strādāt kopā, kuras citādi nevarētu radīt nesaderīgas saskarnes."

Tagad iedziļināsimies kādā kodā. Apsveriet šādas divas klases.

sabiedrības klase MērķisA

            {

public void DisplayA ()

                {

Console.WriteLine ("TargetA");

                }

            }

sabiedrības klase MērķisB

            {

public void DisplayB ()

                {

Console.WriteLine ("TargetB");

                }

            }

Kā redzat, abas klases nav savienojamas - arī tām nav kopīgas bāzes. Šis kodu saraksts parāda, kā izskatās adapteru klases.

publiskā saskarne ITargetAdapter

            {

void ProcessData ();

            }

publiskā klase AdapterA: ITargetAdapter

            {

public TargetA targetA {get; komplekts; }

publisks spēkā neesošs process ()

                 {

targetA.DisplayA ();

                 }

publiskais adapteris A (TargetA obj)

                 {

targetA = obj;

                 }

            }

publiskā klase AdapterB: ITargetAdapter

            {

publiskais TargetB targetB {get; komplekts; }

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

publiskais Adapteris B (TargetB obj)

                 {

targetB = obj;

                 }

            }

Ņemiet vērā, ka abām adapteru klasēm ir viena kopīga saskarne ar nosaukumu ITargetAdapter, ko šīs klases ievieš. Katrai no divām adapteru klasēm ir argumentu konstruktors, kas pieņem atsauci uz attiecīgo mērķa klases objektu. Interfeisā ITargetAdapter ir procesa () deklarācija. Šo metodi īsteno gan adapteru klases - šīs metodes izsauc Display (), gan attiecīgās mērķa klases atbilstošās displeja metodes, kuras mēs ieviesām iepriekš.

Šis kodu saraksts parāda, kā jūs varat izmantot šīs adapteru klases.

klases programma

    {

static void Main (virkne [] args)

        {

ITargetAdapter adapter = jauns AdapterA (jauns TargetA ());

adapteris.Process ();

adapteris = jauns AdapterB (jauns TargetB ());

adapteris.Process ();

Konsole. Lasīt ();

        }

Kā redzat iepriekš minētajā koda fragmentā, mums adaptera klases konstruktoram jānodod attiecīgās mērķa klases eksemplārs.

Es izklāstīšu diskusijas par vairākiem dizaina modeļiem savos gaidāmajos ierakstos šeit. Adaptera dizaina modelis var būt laba izvēle, kad lietojumprogrammās jums ir jāizsauc mantotais kods. Šajā rakstā varat uzzināt vairāk par adaptera dizaina modeli.

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