Design pattern, yazılım dünyasında OOP temeline dayanarak, var olan ortak problemlere uygulanan çözümlerdir. Basit bir örnek ile açıklarsak, bir nesnenin sadece tek bir instance oluşmasını istiyorsak(mdi form gibi), Singleton patterni bu probleme bir çözüm getirmiştir. Yazılım dünyasında logical çözüm geliştirmeden; çok tasarım tabanlı çözüm geliştirmeye amaç edinmesidir. Geliştirilen uygulamanın esnekliğine(flexible), tekrar kullanabilirliliğine (reusability) odaklanmasıdır. Dolayısı ile geliştirilen çözümü, tekrardan geliştirme, iyileştirme(improvement),versiyonlama süreçlerinde büyük avantaj sağlamaktadır. Yazılım süreçlerinde mimari açıdan büyük önem taşımaktadır. Geliştirilen uygulama bir takım tarafından geliştiriliyorsa, uygulama geliştiriciler tarafından da rahatlıkla konuşmayı ve anlaşmayı destekler. Biraz da araştırma sonucu design pattern tanımlarına bakalım.
Ekşisozluk:
nesneye yonelik programlamada ** sik sik karsilasilan program dizayn problemlerini tanimlayip, herhangi bir programlama dilinden bagimsiz olarak bu problemlerin cozumunu class,interface, subclass,method gibi temel oop elemanlari ve bu elemanlarin iliskileri cercevesinde ifade etmekte kullanilir design pattern'lar. software engineering'in heyecan verici konularindan biri olup, dogru durust anlasilirsa, programcinin isini oldukca kolaylastirir, yazilan kodun tekrar tekrar kullanilmasina* imkan saglayarak. ama bu konudaki kitaplarin, ozellikle de konunun islendigi en onemli kitap sayilan, gang of four'un yazdigi 'design patterns elements of reusable object oriented software' adli kitabin soyutlugu da meshurdur.
1.(willy van der kerkhoff, 14.04.2002 06:29 ~ 07.03.2006 21:11)
IBM T J Research / James W Cooper:
· “Design patterns are recurring solutions to design problems you see
over and over.” (The Smalltalk Companion)
“Design patterns constitute a set of rules describing how to accomplish
certain tasks in the realm of software development.” (Pree 1994)
· “Design patterns focus more on reuse of recurring architectural design
themes, while frameworks focus on detailed design and
implementation.” (Coplien and Schmidt 1995)
· “A pattern addresses a recurring design problem that arises in specific
design situations and presents a solution to it.” (Buschmann et al.
1996)
· “Patterns identify and specify abstractions that are above the level of
single classes and instances, or of components.” (Gamma et al., 1993)
But while it is helpful to draw analogies to architecture, cabinet making,
and logic, design patterns are not just about the design of objects but about
the interaction between objects. One possible view of some of these
patterns is to consider them as communication patterns.
Christopher Alexander:
"Each pattern describes a problem which occurs over and over again in our
environment, and then describes the core of the solution to that problem, in such a way that you can use this
solution a million times over, without ever doing it the same way twice"
Bir patterni oluşturan dört temel esas vardır; pattern ismi, problem, çözüm ve sonuç. Bu dört unsur, var olan problemler karşısında mantıksal çözümlerden ziyade tasarımsal esnekliği ve tekrar kullanımı yüksek çözümü yüksek olan patterni sunar.
Design Pattern temel yaklaşım olarak 3 ayrılır: creational(oluştursal ),structural(yapısal) ve behavioral (davranışal) patterns olarak.
a. Creational(oluştursal) pattern: Doğrudan instance almaktan, herhangi bir method veya bir durum ile ilinti instance alınmasıdır. Hangi nesnenin varolan durum için oluşturulması gerektiğine karar vermede daha fazla esneklik kazandıran patternlerdir.
i. Factory Method
ii. Abstract Factory
iii. Builder
iv. Protoype
v. Singleton
b. Structural(yapısal) pattern: hesap verileri yada karmaşık kullanıcı arayüzleri gibi durumlarda, nesne gruplarını daha geniş yapılar içerisinde düzenlememize yardımcı olan patterndir.
i. Adapter
ii. Bridge
iii. Composite
iv. Facade
v. Proxy
c. Behavioral(Davranışsal) pattern: modeliniz içerisindeki nesneler arasındaki iletişimi ve akışın, karmaşık bir yapıdan kontrol edilebilir tanımlamanıza yardımcı olan patterndir.
i. Interpreter
ii. Template Method
iii. Chain of Responsibility
iv. Command
v. Iterator
vi. Mediator
vii. Memento
viii. Flyweight
ix. Observer
x. State
xi. Strategy
xii. Visitor
Bundan sonraki yazılarımda bu patternleri teker teker inceleyerek, örnekleri ile sizler ile paylaşamayı planlıyorum.