Cephe, Proxy, Adaptör ve Dekoratör tasarım desenleri arasındaki fark nedir? [kapalı]


135

Cephe, Proxy, Adaptör ve Dekoratör tasarım desenleri arasındaki fark nedir?

Daha önce net bir açıklama okumadım, seninki ne?



@gavenkoa diğer soru sadece proxy ve dekoratör hakkında
user310291

2
Bazı kapalı sorular kendilerini çok faydalı olarak ortaya koydukları için inanılmaz.
Luke

Yanıtlar:


286

Bağdaştırıcı , belirli bir sınıfı / nesneyi yeni bir arabirime uyarlar. Birincisi durumunda, tipik olarak çoklu kalıtım kullanılır. İkinci durumda, nesne uygun bir adaptör nesnesi tarafından sarılır ve etrafından geçirilir. Burada çözdüğümüz sorun, uyumlu olmayan arabirimlerdir .

Cephe daha çok karmaşık bir işlevsellik setine basit bir giriş kapısı gibidir. Müşterilerinizin daha az endişelenmesi için bir kara kutu yaparsınız, yani arayüzleri daha basit hale getirirsiniz .

Proxy , proxied-for sınıfıyla aynı arabirimi sağlar ve genellikle kendi başına bazı temizlik işleri yapar. (Böylece, ağır bir nesnenin birden fazla kopyasını yapmak yerine, Xhafif bir proxy'nin kopyalarını yaparsınız, Pbu da Xçağrılarınızı gerektiği gibi yönetir ve çevirir.) İstemcinin problemini ağır ve / veya karmaşık bir nesneyi yönetmek zorunda bırakmadan çözüyorsunuz .

Dekoratör , nesnelerinize daha fazla barut eklemek için kullanılır (nesneleri terimine dikkat edin - nesneleri genellikle çalışma zamanında dinamik olarak dekore edersiniz). Nesnenin mevcut arabirimlerini gizlemez / bozmazsınız, yalnızca çalışma zamanında genişletirsiniz .

Şimdi dekoratör var olduğuna göre, muhtemelen nesne nesnesindeki vurgunun neden olduğunu bilmek isteyeceksiniz - bazı diller (Java gibi), bunu gerçekleştirmenize izin vermek için sanal kalıtıma (yani C ++ gibi çoklu kalıtım) izin vermiyor Derleme zamanı.

Biz birden miraslar içinde sürüklenip (ve korkunç elmas) için dışarı bakacağız yana Mixins - edilmektedir arayüzleri zincirleme lineer sıralı çoklu miras sorunları aşmanın. Ancak, karışımlar o kadar iyi karışmaz. Ve biz özellikleri ile bitirmek - evet C ++ şablon parametrelerinde her zaman pop-up gördüğünüz vatansız küçük davranış blobs . Özellikler, birden fazla miras veya düzenli zincirleme için gitmezken, kompozisyon ve davranışların ayrıştırılması konularını zarif bir şekilde ele almaya çalışır.


1
HTH! Çok belirsiz olmadan olabildiğince koymaya çalıştım. Daha iyisini yapamam için özür dilerim. Sadece özelliklerle ilgili (doktora tezi) yazılar okudum. Bu nedenle bilgim oldukça sınırlıdır ve bu alandaki tüm desenlere uyacak kadar iyi değilim;)
dirkgently

Mixins ve özellikler hakkında gelecekteki bir soru beklediniz, ancak henüz görmedim!
user310291

1
İlk üç için iyi bir karşılaştırma bağlantısı (wikipedia üzerinden) (Dekoratör oldukça farklıdır): NetObjectives
Liviu

@Liviu Bağlantınız öldü. Başlangıçta oraya işaret ettiğinizi varsayıyorum , ancak içerik şimdi bir girişin arkasında görünüyor.
Jonathan H

@Sheljohn Bağlantı güncellendi: p: İlk üç için iyi bir karşılaştırma bağlantısı (wikipedia aracılığıyla) (Dekoratör oldukça farklıdır) NetObjectives (Metni alma, bkz. "Betweem": "Sınıfta aldığım en sık sorulan sorulardan biri" ne , Proxy ve Cephe arasındaki fark nedir? Gerçekten benim için aynı görünüyorlar. "
Liviu

16

Cephe

Örneğin, bir API'ya çağrıları kolaylaştırmak için bir cephe kullanabilirsiniz. Bu uzak cephe örneğine bir göz atın . Buradaki fikir, kodun sunucuda tam olarak uygulanmasının istemciden gizlenmesidir. İstemci, sunucuda 1 veya daha fazla API çağrısı yapabilen 1 API yöntemini çağırır.

adaptör

Buna iyi bir örnek burada , Wikipedia'da bulunabilir. Bir istemci nesnesi Sourcebaşka bir nesnede bir yöntem çağırmak ister Target, ancak diğer nesnenin arabirimi istemcinin beklediğinden farklıdır.

Bağdaştırıcı nesnesini girin.

Nesneden bir çağrı alabilir Sourceve perde arkasında Targetkullanılması gereken yöntemi çağırabilir .

Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)

Proxy'ye gelince, bu tasarım deseniyle ilgili herhangi bir deneyimim yok.

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.