2010-08-15 18 views

cevap

232

Adaptör belirli bir sınıfı/nesneyi yeni bir arabirime uyarlar. Eski durumunda, tipik olarak birden fazla kalıtım kullanılır. İkinci durumda, nesne uygun bir adaptör nesnesi ile sarılır ve etrafından geçirilir. Burada çözdüğümüz sorun, uyumlu olmayan arayüzler'dur.

Cephe karmaşık bir işlevsellik kümesi için basit bir ağ geçidine benzer. Müşterilerinizin daha az endişelenmesi için bir kara kutu yapın, yani arayüzleri daha basit hale getirin.

Proxy, proxy'ye ayrılmış sınıfla aynı arabirimi sağlar ve genellikle bazı temizlik malzemelerini kendi başına yapar. (X ağır bir nesnenin birden çok kopyasını yapmak yerine, X'u yöneten ve çağrılarınızı gerektiği gibi çeviren hafif bir proxy P kopyalarsınız.) ağırlığındaki bir müşterinin sorununu çözmek için istemcinin problemini çözüyorsunuz. veya karmaşık nesne.

Dekoratör, nesnelerinize daha fazla barut eklemek için kullanılır (nesneleri çalışma zamanında not edin - genellikle nesneleri çalışma zamanında dinamik olarak düzenlersiniz). Nesnenin mevcut arabirimlerini gizlemez/bozmazsınız, ancak sadece çalışma zamanında'da uzatır.

Dekoratörünüzün dahil olduğunu düşündüğünüzde, muhtemelen, kelime nesnesindeki vurgunun neden olduğunu bilmek isteyeceksiniz - bazı diller (Java gibi), sanal devralmaya izin vermez (örneğin C++ gibi birden fazla kalıtım) size izin verir bunu derleme zamanında gerçekleştirmek için.

biz birden miraslar içinde sürüklenip (ve korkulan elmas) Eğer Mixins dikkat olacağından - çoklu miras problemleri çözmenin arayüzleri lineer zincirleme sıralanır. Ancak, karışımlar iyi karıştırmaz. Ve biz özellikleri ile bitebiliriz - evet bu durgun küçük lekeler C++ şablon parametrelerinde her zaman pop-up görüyorsunuz. Özellikler, birden fazla mirasa veya sıralı zincirlemeye gitmemekle birlikte, kompozisyon ve ayrışma davranışlarını zarif bir şekilde ele almaya çalışır.

+1

HTH! Çok muğlak olmadan yapabileceğim kadar çaba göstermeye çalıştım. Daha iyisini yapamama özür dilerim. Tek başına özelliklerle ilgili (doktora tez) makaleleri okudum. Bu nedenle benim bilgim oldukça kısıtlı ve bu alandaki tüm kalıplara uyacak kadar iyi değilim;) – dirkgently

+0

Karışımlar ve özellikler hakkında gelecekteki bir soru beklediniz ama henüz onları görmedim! – user310291

+1

İlk üç için iyi bir karşılaştırma bağlantısı (wikipedia aracılığıyla) (Dekoratör oldukça farklıdır): [NetObjectives] (http://www.netobjectivestest.com/PatternRepository/index.php?title=AdapterVersusProxyVersusFacadePatternComparison) – Liviu

15

Bir API daha kolay çağrı yapmak için, örneğin bir cephe kullanabilirsiniz

Cephe. Uzak bir cephenin this örneğine bir göz atın. Buradaki fikir, sunucudaki kodun tam olarak uygulanmasının istemciden gizlenmiş olmasıdır. İstemci, sunucuda 1 veya daha fazla API çağrısı yapabilen 1 API yöntemini çağırır.

bu iyi bir örnek Wikipedia'da, here bulunabilir

Adaptör.Bir istemci nesnesi Source, başka bir nesnede Target bir yöntemi çağırmak ister, ancak diğer nesnenin arabirimi, istemcinin beklediği gibi değişir.

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

Source nesnesinden bir çağrı alabilir ve sahnelerin arkasında, kullanılması gereken Target yöntemini çağırın. Vekil gelince

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

, bu tasarım modelinin herhangi bir deneyimi yok.

İlgili konular