Dizaina modeļi: Adapteris. Strukturālās veidnes: Adapter Ready kods adapteriem Java

    Adapteris (dizaina modelis)/koda piemēri- Galvenais raksts: Adapteris (dizaina modelis) Modeļa ieviešanas piemērs C#, izmantojot sistēmu; nosaukumvietas adapteris ( klase MainApp ( static void Main() (... Wikipedia

    Starpniekservera modelis (dizaina modelis)

    Dizaina raksts- Šim terminam ir citas nozīmes, skatiet rakstu. Programmatūras izstrādē dizaina modelis ir atkārtojams arhitektūras dizains, kas atspoguļo problēmas risinājumu... ... Wikipedia

    Interfeiss (dizaina modelis)- Dizaina raksts Interfeiss Aprakstīts sadaļā Dizaina modeļi Nē Datorzinātnē saskarnes modelis nav īpašs modelis starp dizaina modeļiem. Tā ir vispārēja strukturēšanas metode datorprogrammas par to... Wikipedia

    Vietnieks (dizaina modelis)- Pilnvaras raksta (vietnieka) dizaina modelis. Nodrošina piekļuves kontroles objektu, pārtverot visus zvanus uz to. Saturs 1 Mērķis 1.1 Uzdevums 1.2 Risinājums 2 Plusi 3 ... Wikipedia

    Aizbildnis (dizaina raksts)- Design Pattern Guardian Memento tips: uzvedības modelis, kas aprakstīts dizaina modeļos Jā Guardian (pazīstams arī kā Memento, Token, Token) ir uzvedības dizaina modelis. Ļauj salabot, nepārkāpjot iekapsulāciju... Wikipedia

    Iterators (dizaina modelis)- Design Pattern Iterator Iterator Tips: uzvedības Aprakstīts noformējuma modeļos Jā Iteratora modelis (pazīstams arī kā kursors) Dizaina modelis, kas attiecas uz uzvedības modeļiem. Tas ir objekts, kas ļauj iegūt ... Wikipedia

    Tulks (dizaina modelis)- Dizaina modelis Tulka tips: uzvedības Mērķis: atrisina bieži sastopamu, pārmaiņām pakļautu problēmu, kas aprakstīta sadaļā Dizaina modeļi Jā Tulka modelis (angļu ... Wikipedia

    Saistītājs (dizaina raksts)- Dizaina raksts Kompozītmateriāla tips: strukturāls Aprakstīts sadaļā Dizaina raksti Jā Kompozītmateriāls ir dizaina raksts, attiecas uz strukturāliem rakstiem, apvieno objektu ... Wikipedia

    Stāvoklis (dizaina modelis)- Stāvokļa dizaina modelis Tips: uzvedības Aprakstīts dizaina modeļos Jā Stāvoklis ir dizaina modelis. To lieto gadījumos, kad programmas izpildes laikā objekts ... Wikipedia

    Galvenais raksts: Adapteris (dizaina modelis) Modeļa ieviešanas piemērs C#, izmantojot sistēmu; nosaukumvietas adapteris ( klase MainApp ( static void Main() (... Wikipedia

    Šim terminam ir citas nozīmes, skatiet rakstu. Programmatūras izstrādē dizaina modelis ir atkārtojams arhitektūras dizains, kas atspoguļo problēmas risinājumu... ... Wikipedia

    Interfeisa dizaina modelis Interfeiss, kas aprakstīts dizaina modeļos Nē Datorzinātnē interfeisa modelis nav īpašs modelis starp dizaina modeļiem. Tā ir vispārīga metode datorprogrammu strukturēšanai, lai... Wikipedia

    Starpniekservera modeļa dizaina modelis. Nodrošina piekļuves kontroles objektu, pārtverot visus zvanus uz to. Saturs 1 Mērķis 1.1 Uzdevums 1.2 Risinājums 2 Plusi 3 ... Wikipedia

    Design Pattern Guardian Memento tips: uzvedības modelis, kas aprakstīts dizaina modeļos Jā Guardian (pazīstams arī kā Memento, Token, Token) ir uzvedības dizaina modelis. Ļauj salabot, nepārkāpjot iekapsulāciju... Wikipedia

    Dizaina shēmas iteratora iteratora tips: uzvedības modelis, kas aprakstīts dizaina modeļos. Jā Iteratora modelis (pazīstams arī kā kursors) Dizaina modelis, kas attiecas uz uzvedības modeļiem. Tas ir objekts, kas ļauj iegūt ... Wikipedia

    Dizaina modelis Tulka veids: uzvedības Mērķis: atrisina bieži sastopamu, pārmaiņām pakļautu problēmu Aprakstīts sadaļā Dizaina modeļi Jā Tulka modelis (angļu ... Wikipedia

    Dizaina raksts Kompozītmateriāla tips: strukturāls Aprakstīts sadaļā Dizaina raksti Jā Kompozītmateriāls ir dizaina raksts, attiecas uz strukturāliem rakstiem, apvieno objektu ... Wikipedia

    Dizaina paraugs Stāvokļa tips: uzvedības Aprakstīts sadaļā Dizaina modeļi Jā Stāvoklis ir dizaina modelis. To lieto gadījumos, kad programmas izpildes laikā objekts ... Wikipedia

Pirms lasīšanas, lūdzu, pārskatiet tālāk norādītās konvencijas un jēdzienus. Šis raksts tiek atjaunināts ar zināmu biežumu, tāpēc, ja esat to lasījis iepriekš, tas nav fakts, ka dati nav mainījušies.

Adapteris pieder klasei strukturāli modeļiem. To izmanto, lai pārveidotu vienu interfeisu uz citu klientam nepieciešamo. Adapteris nodrošina nesaderīgu saskarņu savietojamību, ieviešot slāni.

Darbības princips

Adapteris manto mērķa saskarni atklātā veidā (sauksim to Mērķis) un slēgtā veidā pielāgojamu saskarni ( Pielāgotais). Realizējot mērķa interfeisa metodes, pieprasījumi tiek novirzīti (deleģēti) uz klasi ar pielāgojamu saskarni

Piemērs

// Mērķa interfeiss, klients var strādāt tikai ar to saskarne iTarget ( public function query(); ) // Pielāgojama saskarne. Klients nezina, kā ar to strādāt, bet ļoti vēlas saskarni iAdaptee ( public function request(); ) // Klase, kas realizē adaptējamu interfeisa klasi Adaptee realizē iAdaptee ( public function request() ( return __CLASS__ . ":: " . __METHOD__; ) ) class Adapter realizē iTarget (aizsargāts $adaptee = null; publiska funkcija __construct() ( $this -> adaptee = new Adaptee(); ) public function query() (atgriezt $this -> adaptee -> pieprasījums (); ) ) $ Mērķis = jauns adapteris (); drukāt $Target -> query(); // "Adapte::pieprasījums"

Secinājums

Adapteris var vienlaikus pielāgot vairākas saskarnes vienā; šo modeli sauc objekta adapterisŠī modeļa izmantošana ir pamatota vairākos gadījumos. Ja vēlaties izmantot esošu klasi ar citu saskarni. Ja plānojat izmantot pielāgojamo interfeisu vairākās vietās un jums nav iespējas, lai tas visur izskatītos vienādi, nomaināmu adapteru izmantošana var būt laba ideja.

Adaptera modeļa mērķis

Bieži vien jaunā programmatūras projekts Esošo kodu nevar izmantot atkārtoti. Piemēram, esošajām klasēm var būt vēlamā funkcionalitāte, bet tām ir nesaderīgas saskarnes. Šādos gadījumos jums vajadzētu izmantot adaptera modeli.

Adaptera modelis, kas ir programmatūras iesaiņojums pār esošajām klasēm, pārvērš to saskarnes formā, kas piemērota turpmākai lietošanai.

Apskatīsim vienkāršu piemēru, kad ir jāizmanto adaptera modelis. Izstrādāsim klimata kontroles sistēmu, kas paredzēta, lai automātiski uzturētu apkārtējās vides temperatūru noteiktās robežās. Svarīga sastāvdaļaŠāda sistēma ir temperatūras sensors, ar kuru tiek mērīta apkārtējās vides temperatūra turpmākai analīzei. Šim sensoram jau ir gatavs programmatūra no trešo pušu izstrādātājiem, kas ir klase ar atbilstošu saskarni. Tomēr jūs nevarat izmantot šo klasi tieši, jo sensora rādījumi tiek ņemti Fārenheita grādos. Jums ir nepieciešams adapteris, kas pārvērš temperatūru Celsija.

STL standarta šablonu bibliotēkas rindas, prioritātes_rindas un steka konteineri tiek realizēti, pamatojoties uz secīgo sarakstu, deque un vektoru konteineriem, pielāgojot to saskarnes vēlamajai formai. Tāpēc šos konteinerus sauc par adaptera konteineriem.

Adaptera modeļa apraksts

Ļaujiet klasei, kuras saskarne ir jāpielāgo vēlamajam skatam, nosaukta Adaptee. Lai atrisinātu saskarnes pārveidošanas problēmu, adaptera modelis ievieš šādu klašu hierarhiju:

  • Mērķa virtuālā bāzes klase. Paziņots šeit lietotāja interfeiss piemērots tips. Lietotājam ir pieejama tikai šī saskarne.
  • Atvasināta adaptera klase, kas ievieš mērķa saskarni. Šajā klasē ir arī rādītājs vai atsauce uz Adaptee gadījumu. Adaptera modelis izmanto šo rādītāju, lai pāradresētu klienta zvanus Adaptetam. Tā kā Adaptee un Target saskarnes nav savietojamas viena ar otru, šiem zvaniem parasti ir nepieciešama konvertēšana.

Adaptera modeļa ieviešana

Adaptera modeļa klasiskā ieviešana

Šeit ir adaptera modeļa ieviešana. Iepriekš minētajā piemērā mēs pielāgojam klimata kontroles sistēmas temperatūras sensora rādījumus, pārveidojot tos no Fārenheita grādiem uz grādiem pēc Celsija (tiek pieņemts, ka šī sensora kods nav pieejams modifikācijai).

#iekļauts // Jau esošās vides temperatūras sensoru klases klase FahrenheitSensor ( publisks: // Iegūt temperatūras rādījumus Fārenheitā float getFahrenheitTemp() ( float t = 32.0; // ... daži kodi atgriež t; ) ); klase Sensors ( public: virtual ~Sensor() () virtual float getTemperature() = 0; ); klase Adapteris: publiskais Sensors ( publisks: Adapteris(Fārenheita sensors* p) : p_fsensor(p) ( ) ~Adapteris() ( dzēst p_fsensor; ) float getTemperature() ( return (p_fsensor->getFahrenheitTemp()-32.0)*5.0/9.0 ;) privāts: Fārenheita sensors* p_fsensor; ); int main() ( Sensors* p = jauns adapteris (jauns Fārenheita sensors); cout<< "Celsius temperature = " << p->getTemperature ()<< endl; delete p; return 0; }

Adaptera modeļa ieviešana, pamatojoties uz slēgtu mantojumu

Ļaujiet mūsu klimata kontroles sistēmas temperatūras sensoram atbalstīt regulēšanas funkciju precīzākiem rādījumiem. Šī funkcija nav jāizmanto, iespējams, tāpēc izstrādātāji esošajā FahrenheitSensor klasē atbilstošo adapt() metodi ir pasludinājuši par aizsargātu.

Mūsu izstrādātajai sistēmai ir jāatbalsta mērījumu pielāgošana. Tā kā piekļuve aizsargātai metodei, izmantojot rādītāju vai saiti, ir aizliegta, klasiskā Adaptera modeļa ieviešana šeit vairs nav piemērota. Vienīgais risinājums ir mantot no FahrenheitSensor klases. Šīs klases saskarnei ir jāpaliek lietotājam nepieejamai, tāpēc mantojumam jābūt privātam.

Atvērtā un slēgtā mantojuma izmantošanas mērķi ir atšķirīgi. Lai gan atklātā mantošana tiek izmantota saskarnes un ieviešanas mantošanai, slēgtā mantošana tiek izmantota tikai ieviešanas mantošanai.

#iekļauts class FahrenheitSensor ( public: float getFahrenheitTemp() ( float t = 32.0; // ... return t; ) protected: void adjust() () // Pielāgot sensoru (aizsargātā metode) ); klase Sensors ( public: virtual ~Sensor() () virtual float getTemperature() = 0; virtual void adjust() = 0; ); klase Adapteris: public Sensor, private FahrenheitSensor ( public: Adapter() ( ) float getTemperature() ( return (getFahrenheitTemp()-32.0)*5.0/9.0; ) void adjust() ( FahrenheitSensor::adjust(); ) ); int main () ( Sensors * p = jauns adapteris (); p-> pielāgot (); cout<< "Celsius temperature = " << p->getTemperature ()<< endl; delete p; return 0; }

Adaptera modeļa lietošanas rezultāti

Adaptera modeļa priekšrocības

  • Adaptera modelis ļauj atkārtoti izmantot esošo kodu, pielāgojot tā nesaderīgo saskarni izmantojamā formā.

Adaptera modeļa trūkumi

  • Interfeisu konvertēšanas uzdevums var būt sarežģīts, ja klienta izsaukumiem un/vai nodotajiem parametriem nav funkcionālas atbilstības adaptējamajā objektā.

Sveiki visiem! Šodien mēs runāsim par Raksts Adaptera dizaina modelis. Kā norāda nosaukums, tas kalpo, lai kaut ko nodrošinātu pielāgoties, bet kas? Un šis raksts jums atbildēs uz šo jautājumu.

Adaptera dizaina modeļa apraksts

Nedaudz attālināsimies no programmēšanas un paskatīsimies adapteri reālajā dzīvē. Piemēram, jūs iegādājāties kādu aprīkojumu (piemēram, datoru) ārzemēs. Atbraucis ar to mājās, atklājāt, ka cita standarta spraudnis neder mūsu krievu kontaktligzdai. Ko darīt? Pa labi! Jāiet uz veikalu un jāpērk adapteris, izmantojot kuru varat savienot datoru ar tīklu. Tātad šis adapteris un ir adapteris. Mēs ievietojam tajā svešu spraudni, bet pašu adapteri ievietojam tīklā, un viss darbojas lieliski. Tie. tas kalpo vienkārši slānis starp mūsu kontaktligzdu un ārvalstu kontaktdakšu.

Tāpēc es domāju, ka jūs to sapratāt kas ir adapteris dzīvē. Programmēšanā tas pats.

Adaptera ieviešanas piemērs PHP

interfeiss iMain(
publiskā funkcija send();
}

Interfeiss iAdaptee (
valsts funkciju aptauja();
}

Class Adaptee ievieš iAdaptee (
publiskās funkcijas aptauja() (
atgriezt __CLASS__."::".__METHOD__;
}
}

Klases adapteris ievieš iMain (
aizsargāts $adaptee = null;

Publiskā funkcija __construct() (
$this->adaptee = new Adaptee();
}

Publiskā funkcija send() (
return $this->adaptee->inquiry();
}
}

$mērķis = jauns adapteris();
atbalss $mērķis->sūtīt(); // "Adapte::inquiry"
?>

Tātad, šeit ir mūsu kods. Izdomāsim. Mums ir interfeiss iMain, klienta kods var darboties ar to. Tālāk mums ir saskarne iAdaptee, ar kuru klienta kods nevar darboties, taču mums ar to ir kaut kā jāsadarbojas. Tad mums ir klase Pielāgotais iAdaptee un tā iekšpusē ir metode, ko sauc izmeklēšanu, kas vienkārši atgriež tādu virkni kā KLASE::METODE. Šeit mēs nonākam klasē Adapteris, kas manto saskarni iMain. Tā iekšpusē mēs izveidojam aizsargājamo īpašumu adaptētais, vienāds null. Tālāk konstruktorā mēs izveidojam klases objektu Pielāgotais un ierakstiet to mūsu aizsargātajā īpašumā. Metodē nosūtīt mēs atgriežam metodes izsaukumu izmeklēšanu.

Tas ir viss. Tagad mēs izveidojam adaptera objektu un izsaucam metodi nosūtīt.

Tie. būtība ir tāda, ka mēs varam strādāt ar vienu saskarni, bet nevaram ar citu, un, lai kaut kā mijiedarbotos ar šo mums nepieejamo saskarni, mēs izveidojam adapteris, slānis, caur kuru mēs īstenojam savu uzdevumu.

Secinājums

Tagad jums var šķist, ka viss ir ļoti sarežģīti un grūti, bet tas tā nav. Es domāju, ka jūs saprotat adaptera nozīmi, bet tagad jums ir nepieciešama vairāk prakses. Vēlreiz apskatiet šajā rakstā sniegto kodu un mēģiniet to saprast. Izejiet to rindu pēc rindas un deklamējiet to tā, it kā jūs būtu tulks php. Kā arī iesaku paskatīties uz kāda ietvara kodu, jo tur šī veidne tiek izmantota diezgan bieži.

Ar to šis diezgan garais raksts ir noslēdzies, paldies par uzmanību!