Cephe, Proxy, Adaptör ve Dekoratör tasarım desenleri arasındaki fark nedir?
Daha önce net bir açıklama okumadım, seninki ne?
Cephe, Proxy, Adaptör ve Dekoratör tasarım desenleri arasındaki fark nedir?
Daha önce net bir açıklama okumadım, seninki ne?
Yanıtlar:
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, X
hafif bir proxy'nin kopyalarını yaparsınız, P
bu 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.
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 Source
baş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 Source
ve perde arkasında Target
kullanı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.