Adaptör Tasarım Modeli

Adapt kelimesi yeni bir kullanıma uygun anlamına gelmektedir.

Maarten Wijnants'ın Unsplash'taki fotoğrafı

Evlerimizden örnek verelim, hepimiz duvarlarımıza monte edilmiş elektrik prizlerini görmüşüzdür. Bu prizlerle ilgili garip bir gerçek var ki, her ülkenin kendine özgü elektrik prizi tarzı vardır. Bu nedenle akıllı telefon üreticileri, ülkeye özgü farklı tarzda şarj adaptörleri üretiyor.

Bir başka harika örnek de Apple'ın Hyperdrive'ı olabilir. Bu kadar çok cihazı tek bir USB bağlantı noktasına bağlar. Burada hyperdrive, Adaptör görevi görür.

Görüntü kaynağı: HyperDrive Thunderbolt 3 Hub

Adaptör ayrıca sarıcı olarak da bilinir. farklı nesneler tarafından kullanılabilecek nesneleri sarmasına neden olur.

Önce UML'yi görelim.

  1. Temelde client kalıbı kullanmak isteyen sınıftır. Çağıran sınıf.
  2. Sadece hizmet edebileceğimiz client istekler , doğrudan bir HAS-A ilişkisine sahip olabiliriz ve onunla işimiz bitebilir. Ama sorun başka bir belirli_talep olduğunda ortaya çıkar ve diyelim ki başka bir istek tarafından hizmet verilir , bu durumda başka bir HAS-A ilişkisi kurmamız gerekir ve bu her yeni gereksinimle tekrar ortaya çıkabilir. Sorunu görüyorsunuz, her yeni istek geldiğinde bunu müşteri sınıfına eşlememiz gerekiyor, şimdi bu yaklaşımda neyin yanlış olduğunu tartışacaksınız, eğer bunu her bir istek için yaparsanız kodunuz “ Aç ” uyarınca genişletilemez. -Kapalı prensibi ” Değişikliğe Kapalıyız .Specific_request()class Adapteeclass Adaptee2

Bu kaosla başa çıkmak için, yeni bir istek kavramını soyutlayabiliriz ve soyutlamanın müşteri tarafından yapılan bir isteğin delegasyonunu ele almasına izin verebiliriz. Yukarıdaki UML'de, interface ITarget.

Hadi kodlamaya geçelim.

Örnek, Diyelim ki uygulamamız bir XML dosyasından veri okuyor ve bugünün amacına hizmet ediyor ama yarın uygulamamızın JSON'u desteklemesini istiyorsak ne olacak ? İşte o zaman Adapter tasarım modelini kullanabiliriz.

Bu problem için mimariyi tasarlayalım. Aşağıdaki şemada 2 sınıfımız var XMLAdapteeve JSONAdapteebu sınıflar, interface IEmployeeDetailshangi soyut yönteme sahip olduğunu miras alacaklar GetData(), böylece sınıflarımız kendi mantıkları için kendi uygulamalarını kullanabilirler.

XML'de sonuç istiyorsa örneği class programenjekte edebilir veya JSON'da sonuç istiyorsa örneği geçebilir .XMLAdaptee’sAdapter objectJSONAdaptee’s

Şimdi, yarın YAML için başka bir gereksinim gelirse, o zaman basitçe sınıf oluşturabilir YAMLAdapteeve kendi mantığını GetData() method.

UML'miz şöyle görünür:

Müşterimiz interface ITargettarafından çağrılacak bir tane oluşturalım.

Sonraki, class Adapter,

uygulayacak ITarget: bu sınıf ayrıca şunları da içerir interface IEmployeeDetails: bu arayüz, benzer mimariyi her iki sınıfta da tutmak için hem XML hem de JSON Adaptelerimiz tarafından uygulanacaktır, bu nedenle istemci kodumuz değişmeyecektir.

Bir oluşturalım interface IEmployeeDetails:

bir class employeeveentity:

Bir class XMLAdapteexml verilerini yüklemek için. Şimdilik kodun kendisinden veri üretebiliriz.

Sonraki, class JSONAdaptee:

Son fakat en az değil, arayanımız class program:

XML verileri için çıktı: satır numarası 15program.cs

JSON verileri için çıktı, sadece koddaki yukarıdaki satırı kaldırın. satır numarası 18program.cs

Mükemmel! Umarım bu makaleyi beğenmişsinizdir ve öğrendiklerinizi kendi uygulamalarınıza uygulamak için ilham almışsınızdır. Teşekkür ederim.

Mutlu kodlama!!

Beni Linkedin'de yakala

Suggested posts

İşyeri Devrimi: En İyi Uzmanlar Hibrit ve Uzaktan Çalışmayı Tartışıyor

İşyeri Devrimi: En İyi Uzmanlar Hibrit ve Uzaktan Çalışmayı Tartışıyor

Günümüzün hızla gelişen iş ortamında, hibrit ve uzaktan çalışma kavramı benzeri görülmemiş bir ivme kazandı. Şirketler, çalışanlarının değişen ihtiyaç ve beklentilerine uyum sağlamaya devam ederken, çeşitli alanlardan uzmanlar bu dönüştürücü çalışma biçiminin faydalarını, zorluklarını ve geleceğini tartışmak için bir araya geldi.

Goodreads Okuma Yarışması Zehirlidir

Goodreads Okuma Yarışması Zehirlidir

Elimdeki kaşıntı, yerel kitapçıyla başka bir kitap için pazarlık yaparken yayıldı. Son zamanlarda satın aldığım diğerleri gibi bu kitap da tahtını 'Okunacak' (TBR) yığınımda bulacaktı; ve yine de satın aldım.

Related posts

Work Week'te Öğrenme sandığınızdan daha önemli

Work Week'te Öğrenme sandığınızdan daha önemli

Çoğu zaman kendimizi, bizim için iyi olduğunu bildiğimiz şeyleri uygulamakta zorlanırken buluruz. Bir başkasına onu sevdiğimizi söylemekten bir korsan gibi konuşmayı hatırlamaya kadar, her zaman bu şeyleri zaten yaptıkları için bir günlük, haftalık veya aylık olaylara gerek olmadığını iddia edenler olacaktır.

Tehdit Avı için OSINT'in Toplanması

Tehdit Avı için OSINT'in Toplanması

Merhaba, siber meraklıları! Tehdit avı için OSINT serisine tekrar hoş geldiniz. İlk makalede, size OSINT'e genel bir bakış ve onun tehdit avlamadaki önemi hakkında bilgi verdim.

Yazma Becerinizi Geliştirmenin Kanıtlanmış 3 Yolu

Yazmanın faydaları ve bunu yapmanıza yardımcı olacak stratejiler

Yazma Becerinizi Geliştirmenin Kanıtlanmış 3 Yolu

2022'de GPT-3'ün piyasaya sürülmesiyle yazma becerisinin önemi azalmış gibi görünüyor. AI ile, zayıf yazıya sahip kişiler de kaliteli personel oluşturabilir.

Medyayı Yeniden Düşünmek: McChesney'nin Beş Gerçeği ve İletişimin Geleceği

Günümüzün hiper-bağlantılı dünyasında, medya sistemleri kamuoyunun şekillenmesinde ve dolayısıyla demokratik karar vermede çok önemli bir rol oynamaktadır. Bilgin Robert McChesney, iletişimin ekonomi politiğine ilişkin derinlemesine analizinde, geleneksel kanıya meydan okuyor ve medya hakkında kendi deyimiyle "beş gerçek" sunuyor.