Structural Patterns (Yapısal Desenler)

Gökhan YAVAŞ
gokhanyavas
Published in
4 min readApr 30, 2017

Merhaba,

Bir önceki yazıda Creational Patterns (Yaratımsal Desenler) konusunu inceledik. Bu yazımda ise Structural Patterns (Yapısal Desenler) inceliyor olacağız. Öncelikle Yapısal desenleri hatırlayalım:

Structural Patterns (Yapısal Desenler)

  • Adapter
  • Facade
  • Decorator
  • Bridge
  • Composite
  • Proxy
  • Flyweight

Şimdi sırasıyla bu desenleri inceleyelim.

Adapter

Sistemdeki soyutlamaları sağlamak için interface’ler abstract sınıflar kullanıldığından bahsetmiştik. Bu desende mevcut bulunan yapıya uymayan bir sınıfı entegre etme tekniğini inceliyeceğiz. Adapter Deseni, sisteme yeni bir özelliğin eklenmesini kolaylaştıran bir tekniktir. Adapter Desenininde, bir adaptör sınıfı yazılır ve bu sınıftan adapte edilmeye çalışılan sınıfa bir referans vardır. Bu sayede yazılmış olan adaptör sınıfı mevcut yapıya entegre bir şekilde çalışır. Aslında bu yapılan iş arka tarafta sisteme yeni bir arayüz kazandırmaktan başka bir şey değildir. Bu sebeple facade tasarım deseni ile ortak noktaları vardır. Ancak, birinin amacı sistemi basitleştirmek, kod kalabalığını engellemek iken, adaptörün asıl hedefi sisteme yeni bileşenleri entegre edebilmektir.

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/adapter_pattern_uml_diagram.jpg[/caption]

Adapter Deseniyle ilgili örneğe buradan ulaşabilirsiniz.

Facade

Alt sistemlerin direk kullanılması yerine, alt sistemlerin kullanılmasını sağlayan arayüzler yazılarak kullanım kolaylaştırılır. Bu arayüzleri gerçekleyen sınıflara facade sınıfları denir. Facade tasarım deseninde, alt sistemde birden fazla sınıf ve bu sınıflar arasında ilişkiler bulunur ve herhangi bir işlemi gerçekleştirmek için bu sınıflardaki metotları belli bir sırayla çağırmak gerekir. Buna, daha yüksek seviyeli bir işlem yapmak gerekebilir de diyebiliriz. Bu durumda bu metotları kendi içersinde sarmalayan yeni sınıflar yazılır. Zaten facede kelime anlamı olarak cephe, ön yüz demektir. Bir nevi kodlarımıza yeni bir ön yüz sağlarlar.

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/facade_pattern_uml_diagram.jpg[/caption]

Bu desen, uygulamada birden fazla modül olduğunda kod karmaşıklığını engelleyip sadeliği sağlamak için kullanılır. Facade deseninin örneğine buradan ulaşabilirsiniz.

Decorator

Bu tasarım deseni, soyutlayarak gevşek bağlılığı sağladığımız sistemimizde mevcut yapımız için yeni metotlar ekleneceği zamanlar kullanılır. Sistemin yapısını bozmadan dinamik metotlar ekleyebileceğimiz bir yapıdadır. Sistemi bu hale getirebilmek için yapının arayüzünden türeyen bir adet decorator sınıfı yazılır. Yazılan bu sınıfın içerisinde kendi türediği sınıfa bir bağımlılık yani referans barındırır. Anlaşılması başta karmaşık gelen bu desen, yeni eklenen yetenekler için kullanılır. Alt sınıf oluşturmanın artık pratik olmadığını düşünüyorsanız decorator yazılması gerekir.

[caption id=”” align=”alignnone” width=”583"]

https://www.tutorialspoint.com/design_pattern/images/decorator_pattern_uml_diagram.jpg[/caption]

Örneği buradan inceleyebilirsiniz.

Bridge

Bridge (Köprü) tasarım deseni, yapısal tasarım desenlerinden birisidir. Soyutladığımız nesneler ile işi gerçekleyecek somut nesneler arasında köprü kurar. Soyut sınıflar ve işi yapacak sınıfları birbirinden ayırdığı için iki sınıf tipinde yapılcak bir değişiklik birbirini etkilemez. Hangi sınıfın kullanılacağına çalışma zamanında karar verilir. Bu mekanizma sayesinde çalışma alanında, gerçek işi yapan sınıf değiştirilebilir.

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/bridge_pattern_uml_diagram.jpg[/caption]

Örneğe buradan ulaşabilirsiniz.

Composite

Composite (Kompozit) tasarım deseni, hiyerarşik olarak ilişkisel nesneleri düzenlemeyi hedefler. Hiyerarşik ilişkilerden kasıt alt üst ilişkileridir. Bir nesneye yaptırılmak istenilen iş, o nesnenin altındaki tüm ilişkili nesneler içinde geçerli olur. Bu durum çoğu zaman askeri düzene benzetilir. Komutan emir verdiğinde altındaki tüm askerlere kadar emir geçerli olur.

[caption id=”” align=”alignnone” width=”358"]

https://www.tutorialspoint.com/design_pattern/images/composite_pattern_uml_diagram.jpg[/caption]

Örneği buradan inceleyebilirsiniz.

Proxy

Proxy tasarım deseni, farklı bir ağdaki ya da oluşturulması zaman alan nesneleri kontrol etmek ve erişmek için kullanılır.

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/proxy_pattern_uml_diagram.jpg[/caption]

Örneği buradan inceleyebilirsin.

Flyweight

Sinek Siklet tasarım deseni, sistemde çok sayıda oluşturulan küçük nesnelerin ortak kullanılarak sistem kaynaklarının daha az tüketilmesini sağlar. Birçok kez oluşturulan nesnelerin tekrar kullanılarak çok sayıda nesne oluşturulması önlenir. Nesnelerin ortak özellikleri olacağı gibi fark özellikleride olacaktır. Aynı özelliklere intrinsic, farklı olan özelliklere extrinsic denir.

[caption id=”” align=”alignnone” width=”426"]

https://www.tutorialspoint.com/design_pattern/images/flyweight_pattern_uml_diagram.jpg[/caption]

Bu desen sistem kaynaklarını daha efektif kullanmak için kullanılır. Örneği buradan inceleyebilirsiniz.

--

--