Konuyu ele alacağım.
Dört desenin de ortak noktası vardır, dördü de bazen gayri resmi olarak sarmalayıcı veya sarmalayıcı desen olarak adlandırılır. Hepsi kompozisyon kullanır, özneyi sarar ve yürütmeyi bir noktada özneye devrederken, bir yöntem çağrısını diğerine eşleme yapar. Müşteriye farklı bir nesne inşa etme ve ilgili tüm verilerin üzerine kopyalama yapma gereğini yedeklerler. Akıllıca kullanılırlarsa, bellek ve işlemci tasarrufu sağlarlar.
Gevşek kuplajı teşvik ederek, bir zamanlar istikrarlı kodu kaçınılmaz değişikliklere daha az maruz bırakır ve diğer geliştiriciler için daha iyi okunabilir hale getirir.
adaptör
Adaptör konuyu (adapte) farklı bir arayüze uyarlar. Bu şekilde, nominal olarak farklı tipte bir koleksiyona yerleştirilecek nesne ekleyebiliriz.
Bağdaştırıcı, yalnızca ilgili yöntemleri istemciye maruz bırakır, diğerlerini kısıtlayabilir, harici kitaplığın uyarlanması gibi belirli bağlamlar için kullanım amaçlarını ortaya çıkarabilir, daha az genel görünmesini ve uygulama gereksinimlerimize daha fazla odaklanmasını sağlar. Adaptörler, kodumuzun okunabilirliğini ve kendi tanımını artırır.
Adaptörler bir takımı diğer takımlardan gelen geçici koddan korur; offshore takımlarıyla uğraşırken hayat kurtarıcı bir araç ;-)
Daha az bahsedilen, konu sınıfının ek açıklamaları aşmasını önlemeyi amaçlamaktadır. Ek açıklamalara dayanan çok sayıda çerçeveyle bu, her zamankinden daha önemli bir kullanım haline geliyor.
Bağdaştırıcı, yalnızca tek kalıtımın Java sınırlamasını aşmanıza yardımcı olur. Birden fazla kalıtım izlenimi veren birkaç uyarlamayı tek bir zarf altında birleştirebilir.
Kod bakımından Adaptör “incedir”. Adaptasyon sınıfına çok fazla kod eklememeli, sadece adaptasyon yöntemini ve bu tür çağrıları yapmak için gerekli veri dönüşümlerini çağırmanın yanı sıra.
JDK veya temel kütüphanelerde pek çok iyi adaptör örneği yoktur. Uygulama geliştiricileri, kütüphaneleri uygulamaya özel arayüzlere uyarlamak için Adaptörler oluşturur.
Dekoratör
Dekoratör sadece temsilci değil, sadece bir yöntemi diğerine eşler, daha fazlasını yaparlar, bazı konu yöntemlerinin davranışını değiştirirler, konu yöntemini hiç çağırmamaya karar verebilir, farklı bir nesneye, yardımcı bir nesneye delege edebilirler.
Dekoratörler genellikle günlüğe kaydetme, şifreleme, biçimlendirme veya nesneye sıkıştırma gibi sarılmış nesneye işlevsellik ekler (saydam olarak). Bu Yeni işlev birçok yeni kod getirebilir. Bu nedenle, dekoratörler genellikle Adaptörlerden çok daha “şişmandır”.
Dekoratör, öznenin arayüzünün bir alt sınıfı olmalıdır. Konuları yerine şeffaf olarak kullanılabilirler. Bkz. BufferedOutputStream, yine de OutputStream ve bu şekilde kullanılabilir. Bu Adaptörlerden önemli bir teknik farktır.
Bütün dekoratörler ailesinin ders kitabı örnekleri JDK - Java IO'da. BufferedOutputStream , FilterOutputStream ve ObjectOutputStream gibi tüm sınıflar OutputStream'in dekoratörleridir . Soğan tabakası olabilir, burada bir dekoratör tekrar dekore edilir, daha fazla işlevsellik eklenir.
vekil
Vekil tipik bir paket değildir. Sarılmış nesne, proxy konusu, proxy oluşturulduğu sırada henüz mevcut olmayabilir. Proxy genellikle dahili olarak oluşturur. İstek üzerine oluşturulan ağır bir nesne olabilir veya farklı JVM veya farklı ağ düğümündeki uzak nesne ve hatta yerel koddaki bir bileşen olan Java olmayan bir nesne olabilir. Başka bir nesneye hiçbir şekilde sarılması veya temsil edilmesi gerekmez.
En tipik örnekler uzak proxy'ler, ağır nesne başlatıcılar ve erişim proxy'leridir.
Remote Proxy - konu uzak sunucuda, farklı JVM'de veya hatta Java olmayan bir sistemde. Proxy, RMI / REST / SOAP çağrılarına veya gerekli olan her şeye yöntem çağrılarını çevirerek istemcinin temel teknolojiye maruz kalmasını önler.
Lazy Load Proxy - nesneyi yalnızca ilk kullanımda veya ilk yoğun kullanımda tamamen başlatın.
Erişim Proxy'si - özneye erişimi denetler.
Cephe
Cephe, En Az Bilgi Tasarım İlkesi (Demeter Yasası) ile yakından ilişkilidir. Cephe Adaptöre çok benzer. İkisi de sarıyor, ikisi de bir nesneyi diğerine eşliyorlar, ama niyetleri farklı. Cephe, bir öznenin karmaşık yapısını, karmaşık nesne grafiğini düzleştirir, karmaşık bir yapıya erişimi basitleştirir.
Cephe karmaşık bir yapı sararak ona düz bir arayüz sağlar. Bu, istemci nesnesinin özne yapısındaki iç ilişkilere maruz kalmasını önleyerek gevşek bağlantıyı teşvik eder.
Köprü
Sadece uygulamanın değil, aynı zamanda soyutlamanın da değiştiği Adaptör modelinin daha karmaşık bir çeşidi. Delegasyona bir aktarım daha ekliyor. Ek heyet köprüdür. Arayüzü uyarlama arayüzünden bile ayırır. Karmaşıklığı diğer sarma desenlerinden daha fazla arttırır, bu yüzden dikkatli uygulayın.
Yapıcılardaki farklılıklar
Desen farklılıkları, yapıcılarına bakıldığında da açıktır.
Proxy var olan bir nesneyi sarmıyor. Yapıcıda konu yok.
Dekoratör ve Bağdaştırıcı zaten var olan nesneyi sarar ve bu genellikle
yapıcıda sağlanır.
Cephe yapıcısı tüm nesne grafiğinin kök elemanını alır, aksi takdirde Bağdaştırıcı ile aynı görünür.
Gerçek hayat örneği - JAXB Marshalling Adaptörü . Bu bağdaştırıcının amacı, basit bir düz sınıfın dışarıdan gereken daha karmaşık yapıya eşleştirilmesi ve konu sınıfının aşırı ek açıklamalarla "kirletilmesini" önlemektir.