Bir uygulama geliştirirken sistemin tasarımıyla ilgili sorunlarla birden çok defa karşılaşabiliriz. Karşılaştığımız problemi çözmek fazlaca zamanımızı alabilir. Burada kodu yazan programcının daha önceki tecrübelerinden yararlanması gerekir. Bahsettiğim problemler algoritmik bir düşünceden değil, tamamen kodun genel tasarımından kaynaklanan problemlerdir.
Tasarım örüntüleri, nesneye yönelik dizayn problemlerinin çözülmesi için tasarlanmış ve programlama dilinden bağımsız stratejilerdir. Bu stratejilerden her biri bir tasarım problemini çözmek için geliştirilmiştir. Türkçesi tasarım örüntüleri olan “Design Patterns”, 4 tane tecrübeli programcı tarafından kitap haline getirilmiş ve 1994 yılında piyasaya sürülmüştür. Sun tarafından Gang of Four (GoF) örüntüleri olarak adlandırılan bu dörtlünün kitabında 23 tane tasarım şablonundan bahsedilmektedir. Aslında yüzlerce tasarım örüntüsü vardır. Hatta bu güne kadar isimlerini bilmeseniz bile yazdığınız uygulamalarda mutlaka en az birini kullanmışsınızdır.
Tek bir problemi çözmek için tek bir örüntü kullanılır. Ancak çoğu zaman programcı bir sistemde birden fazla sorunla karşılaşır. Bu yüzden tüm sistemde birden fazla tasarım örüntüsü kullanılabilir. Çok fazla örüntü kullanmanın ilk bakışta sistemi çok karmaşıklaştırdığı düşünülse de, iyi belirlenerek kullanılmış tasarımları olan bir sistem, hiç tasarım örüntüsü kullanılmamış karmaşık bir sisteme tercih edilir.
Tasarım örüntüleri tekrar tekrar kullanılabildikleri için vaktimizi daha iyi değerlendirmemizi sağlar. Ayrıca tüm dünya tarafından kabul görerek çoğu programcı tarafından kullanıldıklarından dolayı başka programcıların tasarımı anlaması çok daha kolay olur.
Programcılığa yeni başlayan bir yazılımcıysanız size tavsiyem GoF’un 23 örüntüsünden en az birkaç tanesini bilmeniz. Yıllardır yazılımla uğraşan, nesneye yönelik kavramlarla ilgili tecrübeli olduğunu söyleyen fakat tasarım örüntülerinden haberi olmayan birçok programcı var. Sonuçta tasarım örüntüleri ile ilgili internette yüzlerce kaynak bulabilirsiniz. Ben de zamanım oldukça tek tek anlatmaya çalışacağım. Bu yazım sadece giriş niteliğinde olacak.
Tasarım örüntülerini üç ana başlıkta toplayabiliriz.
– Yaratımsal Örüntüler (Creational Patterns) : Yaratımsal örüntüler nesneleri direk bizim yaratmamızdansa bizim için yaratan yapılardır. Bu sayede programlarımız daha esnek bir hal alarak belli bir durumda nesne yaratılmasına karar verebilir.
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
– Yapısal Örüntüler (Structural Patterns) : Yapısal örüntüler sınıf-nesne arasındaki bağlantıdan sorumludurlar. Bu örüntülerde kalıtım kullanılarak arabirimler tasarlanır. Nesne yaratırken yeni fonksiyonaliteler eklenir.
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
– Davranışsal Örüntüler (Behavioral Patterns) : Bu örüntülerin neredeyse tamamı nesneler arası iletişim ile ilgilenir.
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor