Internet Windows Android
Kengaytirish

Java-da adapterlar uchun tayyor kod. Strukturaviy andozalar: adapter

Adapter mos kelmaydigan ob'ektlar o'rtasida do'stlashish imkonini beruvchi tizimli naqshdir.

Adapter qo'ng'iroqlarni biridan ikkinchisiga tushunarli qo'ng'iroqlarga aylantirib, ikkita ob'ekt orasidagi qatlam vazifasini bajaradi.

Java-da naqshning xususiyatlari

Murakkablik:

Mashhurlik:

Qo'llanilishi: Naqshni ko'pincha Java kodida topish mumkin, ayniqsa turli xil ma'lumotlar turlarini konvertatsiya qilish yoki turli interfeyslar bilan sinflarning hamkorligi talab qilinadigan joylarda.

Java standart kutubxonalaridagi adapterlarga misollar:

  • java.io.InputStreamReader(InputStream) (Reader obyektini qaytaradi)
  • java.io.OutputStreamWriter(OutputStream) (Writer obyektini qaytaradi)
  • javax.xml.bind.annotation.adapters.XmlAdapter#marshal() va #unmarshal()

Naqshdan foydalanish belgilari: Adapter konstruktorda yoki uning usullari parametrlari orqali konvertatsiya qilinadigan ob'ektni oladi. Adapter usullari odatda bitta ob'ekt interfeysi bilan mos keladi. Ular qo'ng'iroqlarni birinchi navbatda qo'ng'iroq parametrlarini ichki o'rnatilgan ob'ekt tomonidan qo'llab-quvvatlanadigan formatga o'tkazish orqali o'tkazishadi.

Kvadrat qoziqlarni yumaloq teshiklarga joylashtirish

Ushbu oddiy misol Adapter naqshidan foydalanib, qanday qilib mos kelmaydigan narsalarni birlashtirishingiz mumkinligini ko'rsatadi.

dumaloq

round/RoundHole.java: Dumaloq teshik

paket sayt.adapter.misol.round; /** * RoundHole RoundPegs bilan mos keladi. */ umumiy sinf RoundHole ( xususiy juft radius; umumiy RoundHole(double radius) ( this.radius = radius; ) public double getRadius() ( qaytish radiusi; ) public boolean fits(RoundPeg peg) ( mantiqiy natija; natija = (bu. getRadius() >= peg.getRadius()); natijani qaytarish; ) )

round/RoundPeg.java: Dumaloq qoziq

paket sayt.adapter.misol.round; /** * RoundPegs RoundHoles bilan mos keladi. */ umumiy sinf RoundPeg ( xususiy juft radius; umumiy RoundPeg() () umumiy RoundPeg(ikki radius) ( this.radius = radius; ) umumiy double getRadius() ( qaytish radiusi; ) )

kvadrat

square/SquarePeg.java: Kvadrat qoziq

paket sayt.adapter.misol.kvadrat; /** * Kvadrat qoziqlar dumaloq teshiklar bilan mos kelmaydi (ular loyihada * sobiq ishlab chiquvchilardan keyin qolgan). Ammo biz ularni qandaydir tarzda * tizimimizga qo'shishimiz kerak. */ public class SquarePeg ( private double width; public SquarePeg(double width) ( this.width = width; ) public double getWidth() ( return width; ) public double getSquare() ( double result; result = Math.pow(bu) .width, 2); natijani qaytarish; ) )

adapterlar

adapterlar/SquarePegAdapter.java: Kvadrat qoziqlardan dumaloq teshikka adapter

paket sayti.adapter.misol..adapter.misol.duvar..adapter.misol.kvadrat.SquarePeg; /** * Adapter kvadrat qoziqlar va dumaloq teshiklarni birgalikda ishlatish imkonini beradi. */ umumiy klass SquarePegAdapter RoundPegni kengaytiradi ( xususiy SquarePeg qoziq; ommaviy SquarePegAdapter(SquarePeg qoziq) ( this.peg = qoziq; ) @Override public double getRadius() ( juft natija; // Ushbu qoziqqa mos keladigan minimal radiusni hisoblang. natija. = (Math.sqrt(Math.pow((peg.getWidth() / 2), 2) * 2)); natijani qaytarish; ) )

Demo.java: Mijoz kodi

paket sayti.adapter..adapter.misol.adapterlar..adapter.misol.dumaloq..adapter.misol.dumaloq..adapter.misol.kvadrat.SquarePeg; /** * Mijoz kodida biror joyda... */ public class Demo ( public static void main(String args) ( // Round to round - hammasi ishlaydi. RoundHole teshik = new RoundHole(5); RoundPeg rpeg = yangi RoundPeg (5); agar (hole.fits(rpeg)) ( System.out.println("Dumaloq qoziq r5 r5 dumaloq teshikka mos keladi."); ) SquarePeg smallSqPeg = yangi SquarePeg(2); SquarePeg largeSqPeg = yangi SquarePeg(20 ) ; // hole.fits(smallSqPeg); // Kompilyatsiya qilinmaydi. // Adapter muammoni hal qiladi. SquarePegAdapter smallSqPegAdapter = new SquarePegAdapter(smallSqPeg); SquarePegAdapter largeSqPegAdapter = new SquarePegAdapter(largeSqPegAdapter(holeSqPeg.All); )) ( System.out.println("Kvadrat qoziq w2 r5 dumaloq teshikka mos keladi."); ) agar (!hole.fits(largeSqPegAdapter)) ( System.out.println("W20 kvadrat qoziq r5 dumaloq teshikka sig'maydi." ."); )))

OutputDemo.txt: Amalga oshirish natijasi

Dumaloq qoziq r5 dumaloq teshikka r5 mos keladi. Kvadrat qoziq w2 dumaloq teshikka r5 mos keladi. Kvadrat qoziq w20 dumaloq teshikka r5 mos kelmaydi.

Adapter / o'ram.

Turi

Strukturaviy dizayn namunasi.

Tavsif

Adapter shabloni ob'ekt interfeysini kerakli shaklga keltirish uchun mo'ljallangan.

Ushbu shablon quyidagi hollarda qo'llaniladi:

  • talab qilinadigan funksionallikni ta'minlaydigan, lekin kerakli interfeysni qo'llab-quvvatlamaydigan moslashuvchan deb ataladigan mavjud ob'ekt;
  • (yoki) moslashtirilayotgan ob'ekt qaysi interfeyslar bilan ishlashi kerakligi oldindan ma'lum emas;
  • (yoki) usuli kiritish yoki chiqish ma'lumotlar formati talab qilinganiga mos kelmasligi.

Adapterning asosiy vazifasi kerakli interfeysni amalga oshirish va uning qo'ng'iroqlarini moslashtirilayotgan ob'ektga uzatishdir. Xuddi shunday holat uchinchi tomon kutubxonalaridan foydalanganda ham uchraydi. Ular har doim ham boshqa ob'ektlar bilan aloqa qilish uchun zarur bo'lgan interfeyslarni ta'minlay olmaydi. Biroq, kodni o'zgartirish yoki interfeysni qo'llab-quvvatlashni qo'shish mumkin emas.

Boshqa foydalanish holati kengaytirish modullarini ulash orqali tasvirlangan. Kerakli funktsiyalarni bajaradigan, lekin foydalanish uchun zarur bo'lgan interfeys haqida hech narsa bilmaydigan tayyor komponent mavjud deb faraz qilaylik. Adapter, bu holda, kengaytma tizimining interfeysiga ulanish uchun adapter rolini o'ynaydi. Shu bilan birga, yangi komponentlarni ulash ilovaning funksionalligini o'zgartirishi mumkin.

Naqshdan foydalanishning yana bir misoli xatti-harakatlarga moslashishdir. Ushbu yondashuv, masalan, .NET-da MAQOMOTI ob'ektlari bilan ishlashda qo'llaniladi: ulardan turdagi qiymatlardan olingan xato kodlari NATIJA turidagi otish istisnolariga aylantiriladi COM istisnolar.

Shunday qilib, adapterning maqsadi interfeys yoki xatti-harakatlardagi farqlardan qat'i nazar, mavjud kodni qayta ishlatish qobiliyatini ta'minlashdir. Bundan tashqari, moslashtiriladigan ob'ektlarni o'zgartirish orqali dasturda bajariladigan funktsiyalarga ta'sir qilish mumkin.

Shablonda ishtirok etuvchi ob'ektlarga to'rtta rol tayinlangan:

  1. Moslashuvchan ob'ekt;
  2. Maqsad, kerakli interfeysni belgilaydi;
  3. Adapter;
  4. Faqat maqsadli interfeysni amalga oshiradigan ob'ektlar bilan ishlashi mumkin bo'lgan mijoz.

Quyidagi fikrlarni hisobga olish kerak:

  1. Adapter faqat moslashtirilayotgan ob'ektga qo'ng'iroqlarni o'z ichiga olishi shart emas. U kirish va chiqish ma'lumotlarini qayta ishlay oladi, ularni kerakli formatga keltiradi.
  2. Shablon ichida siz berilgan interfeysni amalga oshirish uchun bir nechta moslashuvchan ob'ektlardan foydalanishingiz mumkin.
  3. Shablonni amalga oshirish, agar moslashtirilayotgan ob'ektda unga ega bo'lmasa, kerakli funksionallikni mustaqil ravishda qo'shishi mumkin.
  4. Adapter nafaqat berilgan moslanadigan ob'ekt bilan, balki uning avlodlari bilan ham ishlashi mumkin.
  5. Moslashtirilayotgan ob'ektning ba'zi usullarini almashtirish mumkin. Bunday holda, zarur almashtirishlarni amalga oshirish uchun kichik sinf yaratish kerak. Va natijani Adapterda foydalaning.
  6. Adapterni amalga oshirish ikki tomonlama bo'lishi mumkin. Bunday holda, moslashuvchan ob'ekt ikkita maqsadni birlashtirish uchun oraliq mantiqni amalga oshiradi, ularning har biri o'z interfeysini talab qiladi.
  7. Moslashuvchan ob'ektni yaratish uchun Lazy Initialization dan foydalanishingiz mumkin.

O'xshash naqshlar va ularning farqlari

Adapter Ob'ektning interfeysini uning funksionalligini o'zgartirmasdan o'zgartiradi. Bir nechta ob'ektlarni bitta interfeysga moslashtira oladi. Mavjud kodni qayta ishlatish imkonini beradi. Moslashuvchan ob'ektni o'z ichiga oladi yoki meros qilib oladi.
Fasad Ob'ektlar guruhini bitta maxsus interfeys ostida birlashtiradi. U ob'ektlar guruhi bilan ishlashni soddalashtiradi va abstraktsiyaning yangi darajasini kiritadi. Ixtisoslashgan interfeysni amalga oshirish uchun zarur bo'lgan ob'ektlarni o'z ichiga oladi yoki ularga havola qiladi.
Ko'prik Ob'ektni abstraktsiya va amalga oshirishga ajratadi. Ob'ekt ierarxiyasi uchun ishlatiladi. Tizimning moslashuvchanligini oshirib, abstraktsiya va amalga oshirishni alohida o'zgartirish (meros olish) imkonini beradi. Berilgan abstraksiya va uning takomillashtirish usullarini (merosxo'rlarini) ta'minlovchi ob'ektni (amalga oshirishni) o'z ichiga oladi.
Dekorator Ob'ektning imkoniyatlarini kengaytiradi va uning harakatini o'zgartiradi. Bezakli ob'ekt interfeysini qo'llab-quvvatlaydi, lekin yangi usullar va xususiyatlarni qo'shishi mumkin. Ob'ektning funksionalligini dinamik ravishda o'zgartirishga imkon beradi. Bu merosga (shu jumladan bir nechta) muqobildir. Bezaladigan ob'ektni o'z ichiga oladi. Ketma-ket chaqirilgan ob'ektlar zanjiri mumkin.
Proksi Ob'ektni shaffof tarzda almashtiradi va unga kirishni nazorat qiladi. Interfeys yoki xatti-harakatni o'zgartirmaydi. Ob'ekt bilan ishlashni soddalashtirish va optimallashtirish. Mijozdan yashirib, o'z funksiyasini qo'shishi mumkin. Ob'ektni yoki unga havolani o'z ichiga oladi va almashtirilgan ob'ekt mavjudligini boshqarishi mumkin.
Bog'lovchi Kompozit ob'ektlar va ularning qismlari bilan o'zaro ta'sir qilish uchun yagona interfeysni ta'minlaydi. Bu mijozning ishini soddalashtiradi va kompozit ob'ektlar va ularning qismlarining yangi variantlarini qo'shishni osonlashtiradi. Kompozit ob'ektlar va ularning qismlarida interfeys sifatida kiritilgan.
Oportunist

U ob'ekt interfeysini o'zgartirishni maqsad qilmaydi. Ammo bu davlatning olingan qismidan ma'lumotlarni qaytarib olish uchun talab qilinishi mumkin.

Ilovadagi ob'ektlar sonini kamaytirish va shu bilan uning resurslarini tejash imkonini beradi. Ob'ekt holatining kontekstga sezgir qismini tashqi ko'rinishga keltiradi, uning bir nechta nusxasini bitta bilan almashtiradi.

Shablonni umumiy shaklda amalga oshirish

Moslashuvchan ob'ekt bilan ishlash uchun ishlatiladigan sxemaga ko'ra, ikkita variant mavjud:

  1. Ob'ekt adapteri - kompozitsiyadan foydalanadi, ya'ni. moslanadigan ob'ektning namunasini o'z ichiga oladi.
  2. Sinf adapteri - moslashtirilayotgan ob'ektdan uning funksionalligini olish uchun merosdan foydalanadi.

Birinchi variant ustunlikka ega, chunki u moslashtirilayotgan ob'ektga kamroq ulanishni ta'minlaydi. Bunday holda, u hatto ma'lum bir dasturga bog'lanmagan holda bir interfeysni boshqasiga o'zgartirishi mumkin.

Ammo sinf adapteridan foydalanish talab qilinadigan holatlar mavjud. Masalan, himoyalangan usullarga kirish zarurati. Boshqa holatda, moslashuvchan ob'ekt o'rniga Adapterdan foydalanish kerak bo'lishi mumkin.

Ob'ekt adapterini amalga oshirish

  • sinf yaratish ITarget yoki sinfdan merosxo'r bo'ling Maqsad kerakli interfeys bilan;
  • uning yopiq maydonida _adaptee moslashtiriladigan ob'ektning namunasini joylashtiring;
  • interfeysni amalga oshirish ITarget

Sinf adapterini amalga oshirish

  • sinf yaratish , bu kerakli interfeysni amalga oshiradi ITarget;
    • shablon sinfdan merosdan foydalanishga imkon beradi Maqsad, lekin bu variantni C# da amalga oshirib bo'lmaydi. Sababi - ko'p merosxo'rlikni taqiqlash.
  • sinfga qo'shish moslashuvchan sinfdan meros;
  • interfeysni amalga oshirish ITarget, moslashtirilayotgan ob'ektning zarur usullari deb ataladigan usullarda;
  • mijoz sinfning namunasidan foydalanadi va kerakli funksionallikni oladi.

Amalga oshirish misollari

1. Obyekt adapteri

Qiyinchilik: ilova hozirda .wav formatida saqlangan foydalanuvchini ogohlantirish uchun ovozli signallarni ijro etishi kerak.

Interfeys IAudioPlayer audio faylni yuklab oladigan va o'ynaydigan eng oddiy media pleerning funktsiyalari tavsifini o'z ichiga oladi.

///

Audio faylni yuklaydi. void Load (string fayl); /// Audio faylni ijro etadi. void Play(); )

Amalga oshirishda, .NET allaqachon sinfni o'z ichiga olganligiga e'tibor bering SoundPlayer, bu o'xshash imkoniyatlarni ta'minlaydi. Biroq, bu sinf belgilangan interfeysni qo'llab-quvvatlamaydi. Shuning uchun biz Adapter shablonidan foydalanamiz:

///

Oddiy audio pleer interfeysi. umumiy sinf SoundPlayerAdapter: IAudioPlayer ( /// Moslashuvchan ob'ekt. faqat o'qish uchun shaxsiy Lazy _lazyPlayer = yangi Lazy (); /// Audio faylni yuklaydi. public void Load(string fayl) ( this._lazyPlayer.Value.SoundLocation = fayl; this._lazyPlayer.Value.Load(); ) /// Audio faylni ijro etadi. public void Play() ( this._lazyPlayer.Value.Play(); ) )

Kod juda oddiy. Siz faqat Lazy Initialization (umumiy sinfdan foydalanib) foydalanishni qayd etishingiz mumkin Dangasa) moslashtirilayotgan sinf uchun. Bu audio fayllar yuklab olinmagan yoki o'ynatilmagan taqdirda amalga oshiriladi.

Endi funksiyalardan foydalanish mumkin SoundPlayer ishlab chiqilayotgan ilovada:

Shaxsiy IAudioPlayer _player = yangi SoundPlayerAdapter(); public void NotifyUser(int messageCode) ( string wavFile = string.Empty; /* O'tkazib yuborildi */ // audio faylni o'ynatish, agar (!string.IsNullOrEmpty(wavFile)) ( this._player.Load(wavFile); this._player. O'ynang(); ))

Savol tug'ilishi mumkin: nima uchun darhol sinfdan foydalanmaslik kerak SoundPlayer? Belgilangan sinfdan aniq foydalanishdan farqli o'laroq, bu yondashuv kodning media pleerning o'ziga xos qo'llanilishidan mustaqilligini ta'minladi. Misol uchun, kelajakda siz osongina o'zgartirishingiz mumkin SoundPlayerAdapter boshqa formatdagi fayllarni qo'llab-quvvatlash uchun boshqa sinfga.

2. Sinf adapteri

Keling, sinf adapteri yordamida bir xil muammoni hal qilishni ko'rib chiqaylik.

Bu safar meros olish kerak SoundPlayerAdapter nafaqat interfeysdan IAudioPlayer, balki sinfdan ham SoundPlayer. Natijada, biz tayyor usulni olamiz Play(), va bu usul Yuklash() buni o'zingiz aniqlashingiz kerak bo'ladi.

///

Oddiy audio pleer interfeysi. umumiy sinf SoundPlayerAdapter: SoundPlayer, IAudioPlayer ( /// Audio faylni yuklaydi. public void Load(string fayl) ( this.SoundLocation = file; this.Load(); ) )

Birinchi versiyaga nisbatan nima o'zgardi?

Birinchi versiyada "qutidan tashqarida" va mijoz kodi uchun shaffof bo'lgan moslashuvchan ob'ektni kechiktirilgan ishga tushirish yo'qoldi.

Amalga oshirish kodi qisqartirildi, chunki Men faqat etishmayotgan usullarni yaratishim kerak edi. Adapter sinfida hech qanday kod bo'lmasligi mumkin. Masalan:

///

Oddiy audio pleer interfeysi. IAudioPlayer umumiy interfeysi ( /// Yuklanadigan .wav faylining fayl yoʻlini yoki URL manzilini oladi yoki oʻrnatadi. string SoundLocation (ol; set; ) /// Audio faylni yuklaydi. void Load(); /// Audio faylni ijro etadi. void Play(); ) /// Oddiy audio pleer interfeysi. umumiy sinf SoundPlayerAdapter2: SoundPlayer, IAudioPlayer()

Bundan tashqari, sinfning namunasi SoundPlayerAdapter endi meros qilib olingan xususiyatlar va usullarning to'liq ro'yxatini taqdim etadi moslashtirilayotgan ob'ektdan. Uni misol o'rniga ishlatish mumkin SoundPlayer zarur bo'lsa. Ammo shuni esda tutish kerakki, bu holda moslashtirilayotgan ob'ekt va dastur kodi o'rtasidagi aloqa mustahkamlanadi. Va bu variantning eng katta kamchiligi.

    Asosiy maqola: Adapter (dizayn namunasi) System yordamida C# da naqshni amalga oshirishga misol; nom maydoni adapteri ( sinf MainApp ( statik void Main() ( ... Vikipediya

    Bu atamaning boshqa maʼnolari ham bor, qarang. Dasturiy ta'minotni ishlab chiqishda dizayn namunasi muammoning yechimini ifodalovchi takrorlanadigan me'moriy dizayndir... ... Vikipediya

    Interfeys dizayn namunasi Interfeys dizayn naqshlarida tasvirlangan Yo'q Informatika fanida interfeys namunasi dizayn naqshlari orasida alohida naqsh emas. Bu... Vikipediya uchun kompyuter dasturlarini tizimlashtirishning umumiy usuli

    Proksi namunasi dizayn namunasi. Kirishni boshqarish ob'ektini taqdim etadi, unga barcha qo'ng'iroqlarni ushlab turadi. Mundarija 1 Maqsad 1.1 Muammo 1.2 Yechim 2 Taroziga 3 ... Vikipediya

    Dizayn namunasi Guardian Memento turi: dizayn naqshlarida tasvirlangan xatti-harakatlar Ha Guardian (shuningdek, Memento, Token, Token nomi bilan ham tanilgan) xatti-harakatlar dizayni namunasidir. Inkapsulyatsiyani buzmasdan tuzatish imkonini beradi... Vikipediya

    Dizayn namunasi iterator iterator turi: dizayn naqshlarida tasvirlangan xatti-harakatlar Ha Iterator naqsh (shuningdek, kursor sifatida ham tanilgan) Xulq-atvor namunalariga ishora qiluvchi dizayn namunasi. Bu sizga ... Vikipediya olish imkonini beradi ob'ekt hisoblanadi

    Dizayn namunasi Tarjimon turi: xulq-atvor Maqsad: tez-tez uchraydigan, o'zgarishi mumkin bo'lgan muammoni hal qiladi Dizayn naqshlarida tasvirlangan Ha Tarjimon namunasi (inglizcha ... Vikipediya

    Dizayn namunasi Kompozit turi: konstruktiv Dizayn naqshlarida tasvirlangan Ha Kompozit naqsh dizayn naqshidir, strukturaviy naqshlarga ishora qiladi, ob'ektni birlashtiradi ... Vikipediya

    Dizayn namunasi Holat turi: xulq-atvor Dizayn naqshlarida tasvirlangan Ha Holat - dizayn namunasi. U dasturni bajarish jarayonida ob'ekt ... Vikipediya bo'lgan hollarda qo'llaniladi

Keling, konstruktiv dizayn naqshlarini ko'rib chiqishga qaytaylik. Bu safar biz nomli dizayn naqshini ko'rib chiqamiz Adapter(u Fasad naqsh bilan birga Wrapper deb ham ataladi).

Ushbu maqolada biz quyidagilar haqida gaplashamiz:

Shunday qilib, Adapter namunasi bitta interfeysga (shartnomaga) ega bo'lgan ob'ektlar butunlay boshqa interfeysga ega ob'ekt kerak bo'lganda ishlashi uchun ishlatiladi. Ikki turdagi adapterlar mavjud - Class Adapter va Object Adapter.

Birinchidan, biz ushbu turlarning har birini ko'rib chiqamiz, so'ngra ikkita o'rash - adapter va fasad o'rtasidagi farqni tushuntiraman.

Ob'ekt adapteri

Ob'ekt adapteri kompozitsiya orqali o'z maqsadiga erishadi. Quyidagi diagrammada mijozdan TargetInterface interfeysidan foydalanish talab qilinadi. Buning uchun TargetInterface interfeysini amalga oshiradigan, shuningdek Adaptee sinfi obyektini saqlaydigan ObjectAdapter klassi yaratiladi. Adapterda targetMethod usulini chaqirganda, moslashtirilayotgan interfeysdagi mos usul chaqiriladi.

Eng oddiy holatda, ObjectAdapter dasturini amalga oshirish quyidagicha bo'ladi:

Ommaviy sinf ObjectAdapter TargetInterface ( xususiy Adaptee adaptee; public void targetMethod() ( adaptee.method() ) ) amalga oshiradi.

Ushbu yondashuvning afzalligi shundaki, biz mijoz interfeysini moslashuvchan interfeysdan butunlay ajratamiz.

Sinf adapteri

Class Adapter misolida, bizning maqsadimizga erishish uchun bir nechta merosdan foydalaniladi. Bizning ClassAdapter mijoz interfeysidan va Adaptable interfeysidan meros oladi. Java-da ko'p meros bo'lmaganligi sababli, ajdodlardan faqat bittasi mavhum/konkret sinf bo'lishi mumkin. Ikkinchi ajdod interfeys bo'ladi, bu har doim ham qulay emas.

Sinf diagrammasi:

Mana, ClassAdapter sinfining ahamiyatsiz amalga oshirilishi:

Ommaviy sinf ClassAdapter TargetInterface moslamasini kengaytiradi ( public void targetMethod() ( method(); ) )

Men sizning e'tiboringizni adapterning bunday amalga oshirilishi bilan usul imzolarida ziddiyat paydo bo'lishi mumkinligiga qaratmoqchiman. Ob'ekt adapterida bunday muammo yo'q.

Sinf adapteri mijoz va moslashuvchan interfeyslarni qat'iy ajratish talab etilmaganda oddiyroq yechim hisoblanadi.

Adapter va fasad o'rtasidagi farq

Endi men Fasad naqshlari haqida bir necha so'z aytmoqchiman, bu adapter kabi o'rashdir. yangi adapter ishlatilayotganda interfeys mavjud interfeyslar.

Fasad va Adapterni bu tarzda solishtirmaslik kerak: ular aytishadi, Fasad bir nechta sinflarni o'rashi mumkin, lekin Adapter faqat bittasini moslashtiradi. Ehtimol, adapter bir nechta sinflarni moslashtirish uchun kerak bo'ladi va aksincha, faqat bitta murakkab sinfni soddalashtirish uchun Fasaddan foydalanish kerak bo'ladi. Shunday qilib, bu ikki naqsh o'rtasidagi farq o'ralgan ob'ektlar sonida emas, balki ular buni nima uchun qilishlarida.

JDK da adapterdan foydalanishga misol

Adapterdan foydalanish misollarini standart kutubxonada ham topishingiz mumkin. Ehtimol, eng mashhur foydalanish holatlari java.io.InputStreamReader va OutputStreamWriter.

InputStreamReader konstruktori kirish sifatida InputStreamni oladi va natijada oqimni Readerga moslashtiradi.

Keyinchalik men ishtirok etgan haqiqiy loyihalardagi adapterlardan foydalanish uchun kodni joylashtiraman, ammo hozircha sizning savollaringiz va sharhlaringizni kutaman. Omad.

    Adapter (dizayn namunasi)/kod misollari- Asosiy maqola: Adapter (dizayn namunasi) System yordamida C# da naqshni amalga oshirishga misol; nom maydoni adapteri ( sinf MainApp ( statik void Main() ( ... Vikipediya

    Proksi namunasi (dizayn namunasi)

    Dizayn namunasi- Bu atamaning boshqa maʼnolari ham bor, qarang. Dasturiy ta'minotni ishlab chiqishda dizayn namunasi muammoning yechimini ifodalovchi takrorlanadigan me'moriy dizayndir... ... Vikipediya

    Interfeys (dizayn namunasi)- Dizayn namunasi interfeysi Dizayn naqshlarida tasvirlangan Yo'q Informatika fanida interfeys namunasi dizayn naqshlari orasida alohida naqsh emas. Bu... Vikipediya uchun kompyuter dasturlarini tizimlashtirishning umumiy usuli

    O'rinbosar (dizayn namunasi)- Proksi namunasi (o'rinbosari) dizayn namunasi. Kirishni boshqarish ob'ektini taqdim etadi, unga barcha qo'ng'iroqlarni ushlab turadi. Mundarija 1 Maqsad 1.1 Muammo 1.2 Yechim 2 Taroziga 3 ... Vikipediya

    Guardian (dizayn namunasi)- Dizayn namunasi Guardian Yodgorlik turi: dizayn naqshlarida tasvirlangan xatti-harakatlar Ha Guardian (shuningdek, Memento, Token, Token deb nomlanadi) xatti-harakat dizayn namunasidir. Inkapsulyatsiyani buzmasdan tuzatish imkonini beradi... Vikipediya

    Iterator (dizayn namunasi)- Dizayn namunasi Iterator iterator turi: xatti-harakat dizayn naqshlarida tasvirlangan Ha Iterator naqsh (shuningdek, kursor sifatida ham tanilgan) Xulq-atvor namunalariga ishora qiluvchi dizayn namunasi. Bu sizga ... Vikipediya olish imkonini beradi ob'ekt hisoblanadi

    Tarjimon (dizayn namunasi)- Dizayn namunasi Tarjimon turi: xulq-atvor Maqsad: tez-tez uchraydigan, o'zgarishi mumkin bo'lgan muammoni hal qiladi Dizayn naqshlarida tasvirlangan Ha tarjimon namunasi (inglizcha ... Vikipediya)

    Bog'lovchi (dizayn namunasi)- Dizayn namunasi Kompozit turi: konstruktiv Dizayn naqshlarida tasvirlangan Ha Kompozit naqsh dizayn naqshidir, strukturaviy naqshlarga ishora qiladi, ob'ektni birlashtiradi ... Vikipediya

    Davlat (dizayn namunasi)- Davlat dizayn namunasi Turi: xatti-harakatlar Dizayn naqshlarida tasvirlangan Ha Holat - dizayn namunasi. U dasturni bajarish jarayonida ob'ekt ... Vikipediya bo'lgan hollarda qo'llaniladi