Komik: Kız arkadaşına adaptör modunun ne olduğunu nasıl açıklayabilirim?

Bu makale, Ranhua Programming'den alınan yetkilendirme ile çoğaltılmıştır. İD: mhcoding)

Sorumlu Editör | Wu Xingling

Hafta sonları evde kaldım ve King of Glory oynadım. Kız arkadaşım yanımda bilgisayarımda oynuyordu. Oynadığı varyete şovunun daha sesli olduğunu düşündüm, bu yüzden Önermek Kulaklık takıyor.

Adaptör modu

Adaptör Modeli, genellikle adaptör modeline çevrilir ve bazen ambalaj modeli olarak da adlandırılır (Wr uygulama desen), GOF'un 23 tasarım modelinden biridir. Ana işlev, bir sınıfın arayüzünü müşterinin istediği başka bir arayüze dönüştürmektir. Bağdaştırıcı deseni, uyumsuz arabirimler nedeniyle birlikte çalışamayan sınıfların birlikte çalışmasına izin verir.

"Design Patterns: Elements of Reusable Object-Oriented Software" ("Design Patterns"), Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides (Addison-Wesley, 1995) ortak yazarıdır. Bu yazarlar genellikle "Dörtlü Çete) veya kısaca GOF olarak anılır.

GOF, adaptör modunu sınıf adaptör moduna ve nesne adaptör moduna böler.

Nesne bağdaştırıcı modeli

Bu bağdaştırıcı deseninde bağdaştırıcı, sardığı sınıfın bir örneğini tutar. Bu durumda adaptör, sarılmış nesnenin fiziksel varlığını çağırır.

Sınıf adaptör modeli

Bu bağdaştırıcı kipinde bağdaştırıcı, uygulanan sınıftan miras alır (genellikle çoklu miras).

İkisi arasındaki fark, yalnızca bağdaştırıcı rolünün devralma veya kombinasyon yoluyla uyarlanmış role uyarlanıp uyarlanmamasıdır.Java birden çok kalıtımı desteklemediğinden ve sınıf bağdaştırıcısı modelinin kapsüllemeyi yok ettiğinden şüpheleniliyor ve ayrıca çoklu kullanım kombinasyonlarını ve daha az kullanımı savunuyoruz miras almak. Bu nedenle, bu makale esas olarak nesne bağdaştırıcısını tanıtmaktadır.

Adaptör modu kullanımı

Hayatımızda sık sık soket dönüştürücüler kullanmamız gerekiyor.Örneğin, birçok cep telefonunun artık doğrudan şarj etmek ve müzik dinlemek için kullanılabilen tek bir soketi var. Ancak öncül, kullandığımız şarj cihazı ve kulaklık soketlerinin bu cihazla uyumlu olmasıdır.

Şu anda piyasada bulunan birçok cep telefonunun soketleri Type-C veya Lightning modelleridir: Ancak yaygın olarak kullanılan kulaklık modellerimiz 2.5mm ve 3.5mm dairesel konektörlerdir.

Bu nedenle 3,5 mm yuvarlak kulaklıklarımızı Lightning veya Type-C arayüzüne takmak istediğimizde bir dönüştürücüye ihtiyacımız var.

Benzer şekilde, bir yazılım sisteminde, bazı "mevcut nesneler" genellikle yeni bir ortama yerleştirilir ve yeni ortamın gerektirdiği arayüz, mevcut nesneler tarafından tatmin edilemez. Aşağıdakine benzer bir senaryo:

1. Sistemin mevcut sınıfları kullanması gerekir ve bu tür arayüzler sistemin ihtiyaçlarını karşılamaz.

2. Gelecekte tanıtılabilecek bazı sınıflar da dahil olmak üzere birbiriyle çok fazla ilişkili olmayan bazı sınıflarla çalışmak için yeniden kullanılabilir bir sınıf oluşturmak istiyorsanız Bu kaynak sınıfların tutarlı bir arayüze sahip olması gerekmez.

3. Arayüz dönüştürme yoluyla başka bir sınıf sistemine bir sınıf ekleyin. (Örneğin, kaplanlar ve kuşlar, artık ek bir uçan kaplan var. Varlığı artırmaya gerek kalmadan, uçma arayüzünü uygulamak için bir kaplan nesnesi içeren bir adaptör eklenir.)

Adaptör modu yukarıdaki sorunları çözebilir.

Adaptör modu uygulaması

Aşağıda bir senaryoyu simüle etmek için adaptör modunu kullanıyoruz: Yalnızca Lightning arayüzünü destekleyen bir Apple telefonunu şarj etmek için bir Android C Tipi şarj cihazı kullanın (mükemmel şekilde desteklenebileceğini varsayarak).

Type-C şarj cihazımız ve Lightning soketli Apple telefonumuz olduğu biliniyor. İster Type-C ister Yıldırım olsun bir standarttır Kodda standart arayüzdür. Bu yüzden önce iki arayüz tanımlıyoruz:

/ **

* Yıldırım şarj portu

* /

genel arayüz LightningInterface {

kamu void chargeWithLightning;

}

/ **

* TypeC şarj bağlantı noktası

* /

genel arayüz TypeCInterface {

public void chargeWithTypeC;

}

Ardından, yalnızca Lightning soketini kullanarak şarj etmeyi destekleyen Apple cep telefonumuzu tanımlayın:

public class IphoneX {

özel LightningInterface lightningInterface;

public IphoneX {

}

public IphoneX (LightningInterface lightningInterface) {

this.lightningInterface = lightningInterface;

}

genel geçersiz ödeme {

System.out.println ("IphoneX telefonumu şarj etmeye başla ...");

lightningInterface.chargeWithLightning;

System.out.println ("IphoneX telefonumu şarj etmeyi bitir ...");

}

// ayarlayıcı / alıcı

}

O zaman Android şarj cihazımızın nasıl tanımlanması gerektiğine bir göz atalım:

/ **

* Android cihazlar için şarj cihazı

* /

public class AndroidCharger, TypeCInterface {

@Override

public void chargeWithTypeC {

System.out.println ("Şarj etmek için Tip-C şarj cihazı kullanın ...");

}

}

Android şarj cihazı ve iPhone ile. Şimdi bir adaptör tanımlayacağız.Umarız ki bu adaptör aracılığıyla Android cihazın şarj cihazını Apple telefonlarını şarj etmek için kullanabiliriz:

public class Bağdaştırıcı, LightningInterface'i uygular {

özel TypeCInterface typeCInterface;

public Adapter {

}

public Adapter (TypeCInterface typeCInterface) {

typeCInterface = typeCInterface;

}

@Override

public void chargeWithLightning {

typeCInterface.chargeWithTypeC;

}

// ayarlayıcı / alıcı

}

Bu adaptör LightningInterface'i uygular ve TypeCInterface'i birleştirir. ChargeWithLightning yöntemi harici olarak çağrıldığında, aslında typeCInterface.chargeWithTypeC yöntemini çağırır.

Tıpkı güç adaptörü gibi, uyguladığı şey, kendisi bir Yıldırım fişi olan bir Yıldırım spesifikasyonudur, ancak gerçekte şarj ederken, C Tipi güç kaynağını kullanır ve ara bir dönüşüm rolü oynar.

Sonra tanımlarız Müşteri , İstediğimiz şarj işlevini elde etmek için:

public class Ana {

public static void main (String args) {

Adaptör adaptörü = yeni Adaptör (yeni AndroidCharger);

IphoneX iphoneX = yeni IphoneX;

iphoneX.setLightningInterface (adaptör);

iphoneX.charge;

}

}

Çıktı aşağıdaki gibidir:

IphoneX telefonumu şarj etmeye başla ...

C Tipi şarj cihazıyla şarj etme ...

IphoneX telefonumu şarj etme işleminin sonu ...

Yukarıdaki örnekte, adaptör aracılığıyla yalnızca Lightning arayüzünü destekleyen bir Apple cep telefonunu şarj etmek için bir Android Type-C şarj cihazı kullanıyoruz.

Yukarıdaki kod, adaptör modelinin bir örneğidir. Bu örnekte, dört rol vardır:

Yukarıdaki dört rol arasında, hedef soyut sınıf (Yıldırım arayüzü), adaptör sınıfı (Android şarj cihazı), Müşteri (Apple telefonlar) orijinal koddadır, onları hiç değiştirmemize gerek yoktur. Sadece bir adaptör (arayüz dönüştürücü) tanıtmanız gerekir.

Lehte ve aleyhte olanlar

avantaj

Bağdaştırıcı kalıbı (nesne bağdaştırıcı modeli), kombinasyonun entegrasyondan daha iyi olduğu fikrinin bir uygulamasıdır. Adaptör desenini kullanarak mevcut sınıfları ve kodları büyük ölçüde yeniden kullanabiliriz. Esas olarak aşağıdaki avantajlara sahiptir:

  • Hedef sınıfı ve adaptör sınıfını birbirinden ayırın ve orijinal kodu değiştirmeden bir adaptör sınıfı sunarak mevcut adaptör sınıfını yeniden kullanın.

  • Sınıfın şeffaflığını ve yeniden kullanılabilirliğini artırın, adaptör sınıfındaki özel uygulamayı kapsülleyin. Müşteri Sınıf şeffaftır ve adaptörlerin yeniden kullanılabilirliğini geliştirir.

  • Esneklik ve ölçeklenebilirlik çok iyidir.Yapılandırma dosyalarının kullanımıyla adaptör kolayca değiştirilebilir ve "açma ve kapama ilkesine" tam olarak uyan orijinal kodu değiştirmeden yeni adaptör sınıfları eklenebilir.

Dezavantaj

Elbette adaptör modu mükemmel değil ve aşırı kullanım yine de bazı sorunlara neden olacaktır. Dezavantajlar aşağıdaki gibidir:

  • Adaptörlerin aşırı kullanımı, sistemi çok dağınık ve bir bütün olarak kavramayı zorlaştıracaktır. Örneğin, A arayüzünün çağrıldığını açıkça görürseniz, aslında B arayüzünün uygulanmasına uyarlanmıştır, eğer bu bir sistemde çok fazla olursa, bir felaketle eşdeğerdir. Bu nedenle, gerekli değilse, adaptörü kullanmadan sistemi doğrudan yeniden yapılandırabilirsiniz.

kullanılacak sahneler

Adaptör modunun kullanım senaryoları ile ilgili olarak, genellikle bazı çalışan kodları değiştirmemiz gerektiğinde ve orijinal kodun yeni işlevler elde etmek için yeniden kullanılabileceğini umduğumuzda, adaptör modu dikkate alınmalıdır.

Spring çerçevesinde, adaptör modu yaygın olarak kullanılmaktadır. Okuyucular kendi IDE'lerini açabilir ve "Adaptör" anahtar kelimesini global olarak kullanmayı deneyebilirler. aramak Sonra, birçok pratik uygulama olmalı.

Karşılaştığınız sorun, bir Apple telefonunu Android şarj cihazı ile şarj etmek istediğinize benziyorsa, adaptör modunu düşünmelisiniz!

Son

Üç atış onaylandı! Honor 9Xin ilk ID tasarımı, "endüktif X dokusu" tasarımı amiral gemisi
önceki
Programcılar düşük kodlu ve kodsuz geliştirme arasında seçim yapmalı mı?
Sonraki
Zaobao: İtalyan basını, Bayern'in Sane + Pepe'den 165 milyon euro alacağını söyledi, Inter Milan imzası Barrera
190622 Wang Junkai, onun yere düşüşünü izlemek için çevrimiçi oldu, anlamak için ilginç bir ruh
Teknik kişilerin yazımı nasıl gerçekleştirilir?
Python yineleyici ve C ++ yineleyici arasındaki en büyük fark ...
Geliştirici, asıl endişeleriniz neler? | AI ProCon 2019
Pinduoduo, Qutoutiao ve Xiaohongshu'nun arkasındaki Şangay İnternet genlerinin sökülmesi
"TFBOYS" "Paylaş" 190622 Yemek yiyip yememek arasında güçlü bir tezat var, TFBOYS hayranlarına "şarkı söylemeye" kararlı
2050'de dünya şehirlerinin "hava tahmini": Londra'da ortalama yaz sıcaklığı 27 derece. 2050'de şehirler ne kadar sıcak olabilir?
"TFBOYS" "Hisse" 190622 Wang Yuan cesurca ileri doğru yürüyor, sırtı sınırsız olasılıklarda sağlam.
"That Boy in My Family" üç ağda birinci oldu ve arka arkaya dokuz şampiyonluk elde etti. Chen Xuedong'un yerli ailesi çok tartışılıyor
Orijinal sesi bırakın! OPPO Reno Müzik Festivali'nin orijinal sesi Chongqing gecesini ateşliyor
Huawei Hongmeng bir IoT işletim sistemidir; ByteDance Feichao, App Store'dan kaldırıldı; FFmpeg yazarı JS motoru yazdı | Geek Başlıkları
To Top