CodeGym/Java Kursu/Modül 3/Yapısal modeller

Yapısal modeller

Mevcut

2.1 Adaptör

Bağdaştırıcı (Adaptör), özel olarak oluşturulmuş bir arabirim aracılığıyla değiştirilemeyen bir nesnenin işlevlerinin kullanımını düzenlemek için tasarlanmış yapısal bir tasarım desenidir.

Resmi tanımı biraz yanıltıcıdır, ancak kendi kelimelerinizle tanımlarsanız, adaptör, uyumsuz arayüzlere sahip nesnelerin birlikte çalışmasına izin veren bir tasarım desenidir .

bağdaştırıcı deseni

Özel olarak oluşturulmuş bir arayüz aracılığıyla değiştirilemeyen bir nesnenin işlevlerinin kullanımını organize etmek için kullanılır . Gerekli arayüze sahip ek bir sınıf oluşturulur ve bu sınıf sırayla istenen nesnenin (gerekli arayüze sahip olmayan) yöntemlerini çağırır.

Önemli! Kodda bir sınıf için Bağdaştırıcı son ekini karşılıyorsanız, bu sınıfın bir bağdaştırıcı görevi gördüğünü ve yukarıda açıklanan şemaya göre çalışan bir grup sınıfla ilişkili olduğunu düşünmeye hakkınız vardır.

Sistemin gerekli verileri ve davranışı desteklediği ancak uygun olmayan bir arayüze sahip olduğu durumlarda kullanılır . Bağdaştırıcı deseninin en yaygın kullanımı, yeni veya var olan bir soyut sınıftan miras alan bir sınıf oluşturmak istediğiniz zamandır.

Güçlü:

  • Diğer harici sınıfları kullanmaya geçiş, sistemin kendisinin elden geçirilmesini gerektirmez, bir Adapter sınıfı daha uygulamak yeterlidir.
  • Harici sınıfların uygulanmasından bağımsızlık (kodunu değiştiremediğimiz kitaplıklardan sınıflar). Programınız harici sınıfların arayüzünden bağımsız hale gelir.

2.2 Dekoratörler

Dekoratör, bir nesneye dinamik olarak ek davranış eklemek için yapısal bir tasarım modelidir. Dekoratör modeli, işlevselliği genişletmek için alt sınıflandırma uygulamasına iyi ve esnek bir alternatif sunar.

dekoratör deseni

Ek yükümlülükleri bir nesneye dinamik olarak bağlamak için kullanılır .

Birçoğunuz şunu soracaksınız: (program çalışırken) bir nesneye dinamik olarak nasıl yeni davranış ekleyebilirsiniz? Parçalardan, yani küçük nesnelerden bir nesne birleştirilebilir. Servlet'lerdeki filtre zincirlerini hatırlıyor musunuz? Veya filter(), map(), list() kullanarak bir sorgu yazdığınızda Akış API'sı?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

Dekoratör modelinin güçlü yönleri:

  • Bir nesnenin işlevselliğini genişletmek için alt sınıflar oluşturmaya gerek yoktur.
  • Yeni işlevselliği herhangi bir yerde dinamik olarak bağlama yeteneği: ConcreteComponent nesnesinin ana işlevinden önce veya sonra.

2.3 Proxy'ler

Proxy, başka bir nesneye erişimi kontrol eden, tüm çağrılarını yakalayan ve geçen bir nesne sağlayan yapısal bir tasarım modelidir.

Vekil (Vekil)

Proxy modeli, gerçek nesnenin yerine ikame bir nesne sağlar. Bu nesne, orijinal nesneye erişimi kontrol eder. Çok sık kullanılır.

Mockito çerçevesini nasıl kullandığımızı ve Mockito.spy() yöntemini veya @Spy açıklamasını kullanarak gerçek bir nesneye yapılan çağrıyı nasıl yakaladığımızı hatırlıyor musunuz? O zaman, orijinal nesneye yapılan tüm çağrıların içinden geçtiği özel bir Proxy nesnesi oluşturuldu.

Ve sonra nesneye kurallar ekleyerek bu çağrıları yönetebiliriz. Doğru - orijinal nesne değişmez ve onunla çalışmak çok daha esnek hale gelir. Özellikle proxy nesnesini kodumuzdan çağırmayıp bir yere ilettiğimizde kullanışlıdır. Böylece bizden bağımsız iki nesnenin iletişimini kontrol ediyoruz.

Amaca göre proxy türleri :

  • Günlüğe kaydetme proxy'si : "Konu"ya yapılan tüm çağrıları parametreleriyle birlikte günlüğe kaydeder.
  • Uzak proxy (uzak proxy'ler): Farklı bir adres alanında veya uzak bir makinede bulunan “Subject” ile iletişim sağlar. İsteği ve argümanlarını kodlamaktan ve kodlanmış isteği gerçek “Konu” ya göndermekten de sorumlu olabilir.
  • Sanal proxy (sanal proxy'ler): gerçek "Konunun" yalnızca gerçekten ihtiyaç duyulduğunda oluşturulmasını sağlar. Oluşturulmasını geciktirmek için gerçek "Konu" hakkındaki bazı bilgileri de önbelleğe alabilir.
  • Yazma üzerine kopyalama : İstemci belirli eylemleri gerçekleştirdiğinde ("sanal proxy"nin özel bir durumu) "konunun" bir kopyasını sağlar.
  • Koruma proxy'leri : Arayanın istekte bulunmak için gerekli izinlere sahip olup olmadığını kontrol edebilir.
  • Önbelleğe Alma Proxy'si : Hesaplama sonuçlarının, sonuçları paylaşabilen birden çok müşteriye sunmadan önce geçici olarak depolanmasını sağlar.
  • Tarama Proxy'si: "Konuyu" tehlikeli istemcilerden korur (veya tam tersi).
  • Senkronizasyon Proxy'si : Eşzamansız bir çok iş parçacıklı ortamda “Konu”ya senkronize erişim kontrolü gerçekleştirir.
  • "Akıllı" bağlantı (akıllı referans proxy'si): "Konu"ya bir bağlantı oluşturulduğunda ek eylemler gerçekleştirir, örneğin, "Konu"ya yönelik aktif bağlantıların sayısını hesaplar.

2.4 Köprü

Köprü modeli, "soyutlama ve uygulamayı bağımsız olarak değiştirebilmeleri için ayırmak" için kullanılan yapısal bir tasarım modelidir.

Köprü modeli, kapsülleme, toplama kullanır ve sınıflar arasında sorumluluğu paylaşmak için kalıtımı kullanabilir.

Köprü

Soyutlama ve uygulama birbirinden ayrıldığında birbirlerinden bağımsız olarak değişebilirler. Başka bir deyişle, köprü deseni aracılığıyla uygulandığında, arayüzün yapısını değiştirmek, uygulamanın yapısını değiştirmeye müdahale etmez.

Böyle bir soyutlamayı bir figür olarak düşünün. Her biri kendi özelliklerine ve yöntemlerine sahip birçok şekil türü vardır. Ancak, tüm figürleri birleştiren bir şey var. Örneğin, her şeklin kendini çizebilmesi, ölçekleyebilmesi vb.

Aynı zamanda, çizim grafikleri, işletim sisteminin türüne veya grafik kitaplığına bağlı olarak farklılık gösterebilir. Şekiller çeşitli grafik ortamlarında kendilerini çizebilmelidir. Ancak, tüm çizim yöntemlerini her şekle uygulamak veya çizim yöntemi her değiştiğinde şekli değiştirmek pratik değildir.

Bu durumda, çeşitli grafik ortamlarda çizim uygulayacak yeni sınıflar oluşturmanıza izin veren köprü deseni yardımcı olur. Bu yaklaşımı kullanarak hem yeni şekiller eklemek hem de bunları çizmek çok kolaydır.

Diyagramlarda okla temsil edilen bağlantının 2 anlamı olabilir: a) Liskov ikame ilkesine göre “bir tür” ve b) soyutlamanın olası uygulamalarından biri. Diller, sınıf hiyerarşilerini şişirme eğiliminde olan hem a) hem de b)'yi uygulamak için genellikle kalıtımı kullanır.

Köprü tam olarak bu sorunu çözmeye hizmet ediyor: nesneler, hiyerarşi A ve hiyerarşi B sınıfının bir nesnesinden çiftler halinde yaratılıyor, Liskov'a göre A hiyerarşisindeki kalıtım “çeşitlilik” anlamına geliyor ve “uygulama” kavramı için . soyutlama”, A nesnesinden eşleştirilmiş B nesnesine bir bağlantı kullanılır.

2.5 Cephe

Cephe modeli, olası tüm harici çağrıları sistemdeki uygun nesnelere devreden tek bir nesneye indirgeyerek sistemin karmaşıklığını gizleyen yapısal bir tasarım modelidir.

Cephe Şablonu

Örneğin bir alt sisteme, o alt sisteme güçlü bir bağlantı istenmiyorsa veya alt sistemin uygulaması değişebilirse, bir dizi farklı uygulama veya arabirimle birleşik bir arabirim nasıl sağlanır?

Alt sistemle bir etkileşim noktası tanımlayın - alt sistemle ortak bir arayüz sağlayan bir cephe nesnesi ve ona bileşenleriyle etkileşim sorumluluğu atayın. Cephe, alt sistem hizmetleri için tek bir giriş noktası sağlayan harici bir nesnedir.

Diğer alt sistem bileşenlerinin uygulanması özeldir ve harici bileşenler tarafından görülmez. Cephe nesnesi, alt sistemin uygulanmasındaki değişikliklere karşı koruma açısından değişikliklere dirençli GRASP modelinin bir uygulamasını sağlar.

Önemli! Bu kalıp, bazı nesne gruplarını tamamen gizlemek ve onlarla tüm iletişimi nesnemiz aracılığıyla geçirmek istediğimizde kullanılır. Yalnızca nesnelerin iletişim süreci üzerinde biraz kontrol sağlamak ve bunları gizlemek istemiyorsanız, Proxy modelini kullanmak daha iyidir.

1
Görev
Modül 3,  seviyeders
Kilitli
Through the Nail with a Microscope
task4101
1
Görev
Modül 3,  seviyeders
Kilitli
Signature Recipe
task4102
1
Görev
Modül 3,  seviyeders
Kilitli
Surprise, Anonymous!
task4103
1
Görev
Modül 3,  seviyeders
Kilitli
Fantastic Creatures
task4104
1
Görev
Modül 3,  seviyeders
Kilitli
Alchemy Library
task4105
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok