Cephe ve Adaptör Kalıbı arasındaki fark nedir?


Yanıtlar:


142

Cephe Desen wiki sayfası bu konuda kısa bir not vardır.

"Sarıcının belirli bir arayüze uyması ve polimorfik bir davranışı desteklemesi gerektiğinde Adaptör kullanılır. Öte yandan, çalışmak için daha kolay veya daha basit bir arayüz istendiğinde bir cephe kullanılır."

Tüm farklı stereo sistemlerinizle çalışmak üzere kurduğunuz evrensel uzaktan kumandanızı düşünmeniz gerektiğine dair bir benzetme duydum - "açık" tuşuna bastığınızda kablo kutunuzu, alıcınızı ve TV'nizi açar. Belki gerçekten süslü bir ev sinemasıdır ve ışıkları karartır ve gölgeleri de çizer. Bu bir Cephe - daha karmaşık bir dizi adımla ilgilenen bir düğme / işlev.

Bağdaştırıcı modeli yalnızca iki uyumsuz arabirimi birbirine bağlar.

DÜZENLEME: Adaptör modeli için hızlı bir benzetme (yorumlara dayalı olarak) DVI-VGA adaptörü gibi bir şey olabilir. Modern ekran kartları genellikle DVI'dır, ancak eski bir VGA monitörünüz var. Video kartınızın beklenen DVI girişine takılan ve kendi VGA girişine sahip bir adaptör ile eski monitörünüzün yeni video kartınızla çalışmasını sağlayabileceksiniz.


4
Uzaktan kumanda kullanarak harika bir benzetme. Bağdaştırıcı modeli açıklaması tamam, ancak aynı türden bir benzetme bulmak harika olur.
Kevin Le - Khnle

2
Gerçekten mükemmel bir benzetme! : Adaptör deseninin bir gerçek dünya Java örneği daha iyi anlamak yardımcı olabilecek InputStreamReaderhangi uyarlar InputStreamiçin Readerve OutputStreamWriteruyarlar OutputStreamiçin Writerfarklı soyut türleridir de.
BalusC

1
@Khnle - Bağdaştırıcı modeli iş başında: upload.wikimedia.org/wikipedia/commons/8/80/…
Eric Petroelje

@Khnle - bir Adaptör benzetmesine eklendi (kişisel deneyime dayalı). @Eric - ilham ve harika fotoğraf için teşekkürler! @BalusC - gerçek dünya örneğine iyi bir çağrı.
awshepard

@BalusC - Ben de senin örneğini beğendim. Şans eseri Java biliyorum. @Eric Petroelje - Bir resim bin kelimeye bedel :-) @awshepard - ı programlama olmasaydı, şimdi de seni açıklama takip edebilir :-)
Khnle - Kevin Le

125

Adaptör == kare bir dübelin yuvarlak bir deliğe oturtulması.

Cephe == tüm dahili bileşenleri çalıştırmak için tek bir kontrol paneli.


8
Bu cevap, mükemmelliğe indirgenmiştir! Bunu desen notlarıma ekliyorum. :)
Joshua Dale

1
sadelikte büyüklük
a-man

20

Dürüst olmak gerekirse, birçok kalıp aynı şekilde programlı olarak uygulanabilir - aradaki fark niyetlidir.

Bağdaştırıcı tasarım kalıbı, bir veya daha fazla sınıfın arabirimini istemcinin kullanmayı beklediği bir arabirime 'çevirmek' anlamına gelir - bağdaştırıcı, aramaları beklenen arabirime sarılmış sınıfların kullandığı gerçek arabirime çevirir.

Cephe deseni, daha basit bir arayüz istendiğinde kullanılır (ve yine aynı şekilde rahatsız edici sınıfları sararak uygulanabilir.) Mevcut arayüz uyumsuz olduğunda, tam ihtiyacınız olduğunda bir cephe kullandığınızı söyleyemezsiniz. daha okunaklı, daha az kötü tasarlanmış vb. yapmak için


18

Cephe:

Temel çıkarımlar : ( Pankaj Kumar'ın journaldev makalesinden)

  1. Cephe deseni daha çok istemci uygulamaları için bir yardımcı gibidir
  2. Cephe deseni, genellikle arayüz sayısı arttığında ve sistem karmaşıklaştığında , herhangi bir geliştirme noktasında uygulanabilir .
  3. Alt sistem arayüzleri Facade'in farkında değildir ve Facade arayüzünün referansına sahip olmamalıdır.
  4. Cephe deseni benzer tür arayüzler için uygulanmalıdır , amacı benzer tür işleri yapan çoklu arayüzler yerine tek bir arayüz sağlamaktır.

Cephe sınıfı diyagramı:

görüntü açıklamasını buraya girin

Adaptör:

  1. Bu bir yapısal model
  2. İki uyumsuz arayüzle çalışmak faydalıdır
  3. Her şeyin tasarlandıktan sonra çalışmasını sağlar

Adaptörün sınıf diyagramı:

görüntü açıklamasını buraya girin

Bu SE gönderisinde Adaptör hakkında daha fazla ayrıntı bulabilirsiniz:

Köprü modeli ve Adaptör modeli arasındaki fark

Temel farklılıklar:

  1. Cephe yeni bir arayüz tanımlarken, Adaptör eski bir arayüz kullanır . Adaptör, tamamen yeni bir arayüz tanımlamak yerine mevcut iki arayüzün birlikte çalışmasını sağlar
  2. Adaptör ve Cephe, hem sarmalayıcıdır; ama farklı türden sarmalayıcılardır. Facade'in amacı daha basit bir arayüz üretmektir ve Adapter'ın amacı, mevcut bir arayüze göre tasarım yapmaktır.

Daha iyi anlamak için kaynak yapımı makalesine de bir göz atın .


Diyagramları görmeyi seviyorum! Yine de biraz açıklama, parametrelerin sayısını / türünü değiştirdiğimde artık bir Adaptör olmadığı anlamına mı geliyor? gibi someMethod(int year, int month) devredilebilir edildi someMethod(DateTime start, DateTime end)veya söylemek sağlar someMethod()devredilebilirsomeMethod(T param)
Jaime Sangcap

Her iki yöntem de aynı sınıftaysa buna aşırı yükleme denir. Farklı sınıflardalarsa, bağdaştırıcı ve uyarlayıcı ilişkisi uygulanırsa daha iyi olabilir
Ravindra babu

Gerçekten güzel bir açıklama.
Duc Filan

14

Bir cephe, tek bir hizmet ağ geçidinin arkasında birden çok hizmeti düzenlemek için tasarlanmıştır. Bir bağdaştırıcı, bilinmeyen bir arabirime erişmek için bilinen bir arabirimi kullanmanın bir yolunu sağlamak için tasarlanmıştır.



8

Cephe genellikle Adaptör ile zıttır.

+--------------------------------------------------------------+-----------------------------------------------+
|                            Facade                            |                    Adapter                    |
+--------------------------------------------------------------+-----------------------------------------------+
| Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
| Works with multiple components                               | Works with single component                   |
| Control panel is an example                                  | A power adapter is an example                 |
| High-level interface                                         | Low-level interface                           |
+--------------------------------------------------------------+-----------------------------------------------+

4

Her zaman olduğu gibi, birkaç model arasında benzerlikler vardır. Ama bunu şöyle görürdüm:

  • Cephe, bir katmanın tamamını kapsamak için kullanılır ve ona "rahatça" erişmek için bazı yöntemler sunar
  • Zaten birlikte çalışması gereken iki bileşene sahip olduğunuz, ancak arabirimdeki bazı "önemsiz" farklılıklar nedeniyle çalışmayan bir adaptör kullanılır.

1
İyi açıklama. Bağdaştırıcıyı tarif ederken ilk kez "önemsiz farklar" kelimesiyle karşılaştım, bu kesinlikle doğru
Sudara

4

Bunu çok fazla formalite olmadan sade kelimelerle açıklamaya çalışacağım.

Bazı alan sınıflarınız olduğunu ve kullanıcı arayüzünden onlarla etkileşim kurmak istediğinizi hayal edin. UI katmanından çağrılabilen işlevler sağlamak için bir cephe kullanılabilir, böylece UI katmanı cephe dışındaki herhangi bir alan sınıfı hakkında bilgi sahibi olmaz. Bu, etki alanı sınıflarındaki işlevleri çağırmak yerine, cepheden tek bir işlev çağırdığınız anlamına gelir, bu da diğer sınıflardan gerekli işlevleri çağırmaktan sorumlu olacaktır.

Öte yandan bir adaptör, ihtiyaç duyduğunuzla aynı işlevselliğe sahip olabilecek diğer harici bileşenleri entegre etmek için kullanılabilir, ancak bunların işlevleri tam olarak aynı şekilde adlandırılmaz. CarEtki alanınızda bir sınıfınız olduğunu ve ayrıca bir Araba sınıfı tanımlanmış harici bir araba sağlayıcısıyla çalıştığınızı varsayalım. Bu sınıfta, işleve sahipsiniz, car.getDoors()ancak dış sağlayıcıda eşdeğeri var car.getNumDoors(). Bu işlevi çağırma şeklinizi değiştirmek istemezsiniz, böylece harici Car sınıfını sarmak için bir adaptör sınıfı kullanabilirsiniz, böylece adaptörün bir çağrısı harici sınıfa getDoors()devredilir getNumDoors().


3

Adaptör modeli, önceden uyumsuz olan iki arabirimin birbiriyle çalışmasına izin verir. Oyunda 2 ayrı arayüze sahiptir.

Cephe deseni, düşük seviyeli / ince taneli, bilinen bir arayüzü alır ve onu daha yüksek seviye / kurs grenli bir arayüzle sarar. Bir başkasıyla sarmalanarak basitleştirilmiş tek bir arayüze sahiptir.


3

Adaptör, iki arayüzün birlikte çalışmasını sağlar.

Cephe, tek bir sınıfı daha yüksek ve daha sınırlı bir seviyeye çıkarır. Örneğin, bir görünüm modeli cephesi, daha düşük seviyeli bir sınıfın yalnızca belirli salt okunur özelliklerini açığa çıkarabilir.


1

Cephe

Daha basit bir arayüz sağlamak için karmaşıklığı özetler. Örneğin, bir bilgisayar işletim sistemi, temeldeki donanımın karmaşıklığını özetler. Veya yüksek seviyeli programlama dilleri (Python / JavaScript), düşük seviyeli bir dile (C) kıyasla karmaşıklığı özetler.

Adaptör

Donanım bağdaştırıcılarına benzer. Bir bağlanmak istediğiniz Say USB devicea serial port, bir gerekecektir USB-serial port adapter.


1

Adaptör modeli, yeni bir arayüz sağlayarak iki uyumsuz arayüzü birbirine bağlar.

Cephe deseni, tek bir arabirimle karmaşık bir alt sistemi (birden çok bileşene sahip) basitleştirir.


1

Bu iki model arasındaki fark açıktır, ancak Tasarım Modelleri alanında değil, Etki Alanı Modellemesinde. Aşağıda nedenini açıklayacağım.

Öncelikle, başkalarının burada söylediklerini yinelemek istiyorum ve sonra notu ekleyeceğim:

Bir Cephe, müşterinin (bize) erişimini basitleştiren bir alt sisteme (harici veya eski bir sistem) bir arayüzdür. Facade, diğer alt sistemin arayüzünü gizler (bazı çağrıları toplar veya ihtiyacımız olmayan bazı API'leri gizler), böylece müşteriniz bu alt sisteme yalnızca bu Facade üzerinden erişir.

Öte yandan, Bağdaştırıcı, başka bir hizmet veya nesnenin etrafındaki bir sarmalayıcıdır. Sarılmış nesneyi, istemcinin beklediği standart bir arayüze uygun hale getirir. Diyelim ki "Ledger" nesnesi üzerinde ince ayar yapmanız gereken (parametrelerini değiştirmek, adını değiştirmek vb.) Bir yöntem var. Bir adaptör ile sarabilirsiniz.

Şimdi, yine de fark net olmayabilir. Bu iki model arasındaki temel farkı, daha fazla kafa karışıklığına yer bırakmadan ortaya çıkarmak istediğim yer burası :

Facade, Adaptör değiştirirken diğer alt sistemin etki alanı modelini değiştirmez. Anahtar fark budur. Dönem.

Bu nedenle, bir Yolsuzlukla Mücadele Katmanı oluştururken bu ikisini birleştirirsiniz . Diyelim ki kullanmak istediğiniz bir alt sisteminiz var, ancak etki alanı modelinin etki alanı modelinizi karıştırmasını istemiyorsunuz. Sen ne yapardın? Bir Yolsuzlukla Mücadele Katmanı oluşturursunuz. Nasıl? Önce, alt sistemin arabirimine erişimi kolaylaştıran bir Cephe oluşturursunuz ve ardından bu arabirimde kullanılan etki alanı nesneleri için bağdaştırıcılar (cephenin diğer alt sistem için etki alanı modelini hala tuttuğunu unutmayın), böylece modelinize uygun olur.

Alan modellemede birçok tasarım deseni kullanılabilir. Bu, Cephe ve Adaptör tasarım modelleri için de geçerlidir. Bu iki model arasındaki fark "tasarım deseni" alanında net olmasa da, "alan modelleme" alanında daha nettir.


0

Her iki tanımı da okuyorum ve oldukça aynı görünüyorlar.

Gerçekten mi ?

Adaptör teriminin bazen gerçekte bir Stratejiyi tanımlamak için kullanıldığını fark ettim , belki de kelime daha anlamlı olduğu için.

Örneğin, Zend Framework'te tüm Adaptör sınıfları aslında Strateji modelinin uygulamalarıdır , çünkü birkaç davranışa sahip olmak için yerel kodu yalnızca sınıfların arkasına sararlar.

Bağdaştırıcılar genellikle eski veya "eski tarz" kodu sarmak için kullanılır.


0

Facade modelinin ana amacı , sınıfın veya alt sistemin kullanımını kolaylaştırmaktır, Adaptör modelinin ana amacı ise arayüzü müşterinin beklediği şekilde ayarlamaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.