4. Design Patterns
Nedir?
Devamlı tekrar eden yazılım
sorularına;
● Esnek
● Yeniden kullanılabilir
● Bağımlılıkları azaltan
çözümler sunmak için kullanılan
kalıplardır.
5. Design Patterns
Kod karmaşıklığını engeller, performansı arttır ve gereksiz kodlamayı azaltacağından
dolayı yazılım sürecini kısaltır.
Diyelim ki büyük bir projede çalışıyorsunuz, sizden önce çok fazla yazılımcı bu projede bir
şeyler geliştirmişler. Fakat bu kalıplara uymadıkları için proje yöneticiniz tarafından
sizden değişiklik istendiğinde projenin çok fazla yerinin okunması ve kod değişikliği
yapılması gerekebilir. Bu da haliyle çok zaman alacaktır.
Aslında kullandığımız paketler, frameworkler bu kalıpları kullanarak ortaya okunabilir,
yeniden kullanılabilir, esnetilebilir çözümler sunmaktadır.
6. Design Pattern Tipleri
● Creational Design Patterns (Yaratımsal Kalıplar)
Yaratımsal tasarım kalıpları, nesnel yaratım mekanizmalarını ele alan ve duruma uygun bir şekilde
nesneler yaratmaya çalışan tasarım kalıplarıdır.
● Structural Design Patterns (Yapısal Kalıplar)
Yapısal tasarım kalıpları, nesneler arasındaki ilişkileri gerçekleştirmenin basit bir yolunu tanımlayarak
tasarımı kolaylaştıran kalıplardır..
● Behavioral Design Patterns (Davranışsal Kalıplar)
Davranışsal tasarım kalıpları, nesneler arasındaki ortak iletişim kalıplarını tanımlayan tasarım
kalıplarıdır. Bu kalıplar iletişimi gerçekleştirerek esnekliği arttırır.
Dünya genelinde 250’den fazla tasarım kalıbı bulunmaktadır. Fakat bunlardan sadece 23 tanesi standart olarak kabul
edilmiştir.
12. Prototype
Kısacası, var olan bir nesnenin bir kopyasını oluşturup kullanma yöntemidir. Sıfırdan bir
nesneyi oluşturma ve kurma sürecini ortadan kaldırır.
clone deyimi var olan nesnenizi o anki özellikleri ile kopyalar. Eğer new söz dizimini
kullanırsanız yani nesneyi tekrardan oluşturursanız, size özelliklere atadığınız default
değerlere sahip, boş bir nesne elde edersiniz ve önceden hesaplanan/ayarlanan değeri
kaybedersiniz.
Bu yüzden Prototype patterni kullanılırken nesne özelliklerinin tamamını
değiştirmeyeceğinizden emin olmanız gerekmektedir.
13. Prototype İşe alım yapan bir firmanın her çalışana aynı laptop, ekran,
mouse verdiğini düşünelim.
Prototype patterni kullanarak
(objeyi klonlayarak) her çalışan
için tekrar tekrar laptop,ekran,
mouse gibi tanımlamalar
yapmaya gerek yoktur.
14. Singleton
Bir nesne düşünelim ve uygulamamızda bir daha türetilmemek, üzerine yazılmaması gerektiğini biliyoruz.
Bunun için Singleton patternini kullanmamız gerekmektedir. Örneğin Bir şirketin CEO’su. Bir devlet
başkanı, tek kalmış bir kitap..
15. Builder
Çok özellikli bir nesne oluştururken __construct metodumuzun uzun uzadıya gittiği
durumlar olabilir. Bu gibi durumlarda çoğu zaman metodun aldığı parametre
sıralamasına bakmak için defalarca koda bakmamız gerekebilir. Builder patterni bizi bu
kod kirliliğinden kurtarır.
Örneğin Akşam arkadaşlarımızla pizza siparişi vereceğiz. 4 kişi 2 tane orta boy pizza
siparişi vermek istiyoruz. İçerisinde de peynir, sosis, et olsun mantar olmasın istedik.
17. Builder
Aşırı uzun parametreler ile işi çözmek yerine basitçe bir builder oluşturarak daha okunaklı ve
kullanışlı hale getirebiliriz.
18.
19. Adapter
Dönüştürücü modeli, bir sınıfın arayüzünü, bir başka sınıfın beklediği arayüze
çevirir. Uyumsuz arayüzleri sebebiyle çalışamayacak sınıfların bir arada
çalışmalarını sağlar.
Bu kalıbın bize sağladığı kolaylık kullandığınız servisin methodlarında değişiklik
olduğunda merkezi bir değişiklik ile karmaşadan kurtulmanızdır.
Örneğin Ödeme servisleri kullanacaksınız. Paypal, PayU gibi. PaypalAdapter’i
oluşturuyoruz ve bunu Paypal interface ‘i gibi kullanıyoruz.
20. Adapter
Örneğin Paypal’in sdk sini kullaniyorsunuz.
Araya bir adapter(bağdaştırıcı) koyduğunuzda, PayPal API da
fonksiyon ismini degistirdiginde sizin yalnizca adapter classindaki
fonksiyon ismini degistirmeniz gerekir.
Paypal SDK
23. Observer
Nesneler arasındaki bağımlılığı tanımlar, böylece bir nesneyi durum
değiştirdiğinde, tüm bağımlılarına bildirilir.
Yani sistemdeki bir obje durum değiştirdiğinde bunun bağımlı olduğu
gözlemcileri bilgilendirir.
Örneğin: Twitter AnkaraPHP grubunu takip ediyorsunuz. AnkaraPHP grubu
bir tweet attı ve twitter sizi bilgilendirdi.