Adaptör kalıbı ile Proxy kalıbı arasındaki fark nedir?


33

Anlayabildiğimiz kadarıyla, bağdaştırıcı deseni gerçek ilgi alanımız için bir sarmalayıcı nesnesi yaratıyor, sadece esneklik sağlayan bir tane daha dolaylı seviye. esneklik, eğer gerçek nesnenin arayüzü değiştirilirse, müşteri tarafına maruz kalan arayüzü değiştirmeden bırakarak, gerçek nesneye işaret eden sarmalayıcı arayüzünü değiştiririz.

Vekil model her yakın sargı gerçek nesnenin işlevselliği sadece uyumlu bir alt dizisini sağlamakta, bu fark, aynıdır. "Neden bir amaç için tek bir sınıf" yapmaya çalıştığımız zaman bu neden faydalı olacak?

Bunu doğru aldım mı?

Yanıtlar:


55

Tam olarak değil.

Bağdaştırıcı düzeninin birincil amacı, sınıf / kütüphane A'nın arabirimini müşterinin B beklentilerine göre değiştirmektir. Tipik uygulama bir sarıcı sınıf veya sınıf grubudur. Amaç, gelecekteki arayüz değişikliklerini kolaylaştırmak değil, mevcut arayüz uyumsuzluklarını kolaylaştırmaktır.

Vekil model aynı zamanda sarma sınıflarını kullanan, fakat farklı bir amaç için. Proxy modelinin amacı, gerçek bir kaynak için bir stand-in oluşturmaktır. Proxy kullanmanın nedenleri

  • Gerçek kaynak uzaktaki bir bilgisayarda bulunur (proxy, uzak kaynakla etkileşimi kolaylaştırır)
  • Gerçek kaynağın yaratılması pahalıdır (vekil, gerçekten gerekli olmadıkça / olmadıkça maliyetin gerçekleşmemesini sağlar)

En önemli şey, bir vekilin, stand-in olduğu gerçek kaynak için bir yedek değiştirme sağlamasıdır, bu yüzden aynı arayüzü sağlamalıdır.


Her şeyden önce, büyük cevap için teşekkürler. Bir vekil mevcut müşterinin ihtiyaç duyduğu tüm arayüzleri mi kullanıyor yoksa gerçek kaynağın sağladığı tüm arayüzleri mi kullanıyor?
Vorac

1
@Vorac: Bu, arayüzün karmaşıklığına ve tasarım felsefenize bağlıdır. Her ikisi de mümkündür, ancak eğer arayüz büyük / karmaşıksa veya YAGNI'ye şiddetle inanıyorsanız, sadece ihtiyacınız olanı uygulamak daha mantıklı olur.
Bart van Ingen Schenau

Böylece, Adaptör kalıbı sarmalayıcı sınıfları kullandığı için Adaptör kalıbı proxy kalıbı mıdır?
moonman239

@ moonman239: Hayır, çünkü sarmalayıcı sınıfını kullanma niyeti farklıdır. Sırf iki modelin bir sınıf diyagramında benzer görünmesi, birbirleriyle ilişkili oldukları veya uyguladıkları anlamına gelmez. Modellerin farklı olması için ana faktör niyetleridir.
Bart van Ingen Schenau

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.