Design Pattern Types

1 - Creatinal Patterns

2 - Behavioral Patterns

3 - Structural Patterns

Literatürde üçe ayrılır:

Creatinal Patterns

(Oluşturucu Tasarım Desenleri)

Bu desenler bir yada daha fazla nesnenin oluşturulması ve yönetilmesi ile ilgilidir.

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype

 

Behavioral Patterns

(Davranışsal Tasarım Desenleri)

Bu gruptaki desenlerin amacı belirli bir işi yerine getirmek için çeşitli sınıfların nasıl birlikte davranabileceğinin belirlenmesidir. 

  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator

  • Memento
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor ​​

Structural Patterns

(Yapısal Tasarım Desenleri)

Bu gruptaki desenler ise çeşitli nesnelerin birbirleri ile olan ilişkileri temel alınarak tasarlanmıştır.

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

Abstract Factory

Temel sınıf nesnesini/nesnelerini oluşturan bir factory (fabrika) sınıf vardır. Nesneler temel sınıflar üzerinden değil, factory sınıf üzerinden türetilir.
Client code (istemci kod, bir diğer deyişle sınıfı kullanacak olan kod), factory sınıfa nesne türetme isteği yapar. Factory sınıf ise istemciye uygun bir nesne döndürür. Factory sınıfın temel görevi, istemcinin istediği nesneyi hangi sınıftan nasıl türeteceğini ondan soyutlamaktır.

İlk önce factory nedir ona bir bakalım:

Peki ya abstract factory?

Abstract factory, factory design'da gerçekleşen ürün üretimi yerine ürünün üretildiği fabrikaları üretmeyi sağlar.

ya da

Farklı ürün ailelerin için uygulanması söz konusu olduğu durumlarda tercih edilir. Mesela yazdığınız uygulamanın hem macos hem de windows platformunda çalışması sözkonusu olduğu durumlarda UI nasıl oluşması gerektiğini soyutlandırarak daha hızlı adapte edebileceğiniz bir yapı geliştirebilirsiniz.

Günlük Hayattan Bir Örnek

Diyelim ki yeni bir eve taşınacaksınız ve oturma grubunuzu da o eve uygun olacak şekilde seçmek istiyorsunuz. Mobilyacıya gittiniz ve bir de baktınız ki farklı büyüklüklerde ve fiyatlarda birçok koltuk çeşidi mevcut. İşte problem! Seçimi hangi kritere göre yapacaksınız? Bu durumda hemen aklınıza belirlemeniz gereken iki parametre gelmiş olmalı. Bunlardan birincisi bütçeniz diğeri de evin salonunun boyutları olacaktır. Bu iki parametre ile mobilyacıya danıştığınızda istediğiniz kriterlere uygun bir mobilyayı daha rahat bir biçimde bulabilirsiniz.

Abstract Factory UML Diagram

HAYDİ UYGULAYALIM...

Peki ya If? Switch?

Her if ya da switch yazdığınızda bir daha düşünün :)
If yazmaya son. Yaşasın OOP!

http://antiifcampaign.com

Bu pattern'i kullanmadan bir if-else ya da switch-case yapısı ile de halledilebilir. Ama bu SOLID prensiplerinden open-closed prensibine uymayacaktır. Çünkü ürünlerde genişlemeye gittiğimde her seferinde aynı yere uğrayacağımdan genişlerken değişmiş olacaktır.

Template Pattern

Bir algoritmanın adımlarının abstract sınıfta tanımlanarak farklı adımların concrete sınıflarında overwrite edilip çalıştırılmasını düzenler. 

 

Dofactory.com a göre kullanım oranı %60 civarındadır. 

Template Pattern

Template tasarım deseninde bir operasyonu gerçekleştirmek için gerekli olan adımlar ve bu adımları çalıştıracak metotlar abstract bir sınıfta tanımlanır. Bu abstract sınıfı uygulayan gerçek sınıflar gerekli adımları overwrite eder ve abstract sınıfında bu adımları kullanan metotlar çağrılarak işlem gerçekleştirilir. Böylece kod tekrarı yapılmasının önüne geçilmiş olunur. 

UML Diagramı

Bir örnek göstermek gerekirse...
(Hem de KEPLER'den)

BİZİ DİNLEDİĞİNİZ İÇİN TEŞEKKÜR EDERİZ

Design Pattern

By Emir Kılınç