Category Archives: Tasarım Şablonları (Design Patterns)

Decorator Tasarım Şablonu

Mevcut bir sınıf hiyerarşisini ya da sınıfın yapısını değiştirmeden, oluşturulan nesnelere yeni özelliklerin eklenme işlemini gerçekleştirmek için Decorator tasarım şablonu kullanılır.

Alt sınıfların oluşturulması yöntemiyle, sınıflara yeni özelliklerin eklenmesi, daha sonra sisteme eklenecek alt sınıflar için değiştirilmesi zor kalıpların oluşmasını beraberinde getirir. Bu durumda, üst sınıflarda tanımlanmış olan bazı özellikler statik ve alt sınıflar için değistirilemez ya da kullanımı engellenemez bir hal alabilir. Kullanıcı sınıflar içinde bu sorun teşkil edebilir, çünkü kendi istekleri doğrultusunda bir nesnenin ne zaman ve nasıl oluşturulması gerektiğini yönlendiremeyebilirler.

Nesnelere, sahip oldukları sınıfların yapılarının değistirilmeden yeni özelliklerin eklenmesini sağlayan Decorator tasarım şablonu ile, istenilen özelliklerin ekleneceği nesne başka bir nesne içine gömülür. Yeni özellik eklenen nesneyi içine alan nesneye dekoratör ismi verilir. Dekoratör nesnesi ile yeni özellik eklenen nesne aynı üst sınfa dahil olduklarından, birbirleriyle değiştirilebilir haldedirler. Bu özellikten dolayı kullanıcı sınıf, dekoratör sınıf ile dekoratör nesne bünyesinde bulunan diğer nesne arasında ayrım yapmaz. Nesneler arası ilişkiye aşagıda ye ralan Uml diagramında görüyoruz.

Bu yazıyı PDF olarak edinebilirsiniz.

  Decorator Tasarım Şablonu (46.6 KiB, 10,782 yükleme)


EOF (End of Fun)
Özcan Acar

Java Enum ile Singleton Tasarım Şablonu

Daha önceki bir yazımda Singleton tasarım şablonunun ne olduğunu ve Java’da nasıl kullanıldığını yakından incelemiştik. Bu yazımda Java 1.5 den itibaren kullanıma sunulan Enum sınıfı ile singleton tasarım şablonunun nasıl kullanılabileceğine değinmek istiyorum.

Öncelikle küçük bir örnek üzerinde singleton bir nesnesinin nasıl oluşturulacağına bir göz atalım:

[source language=’java’]
package com.kurumsaljava.com.designpatterns.singleton;

public class MySingleton
{
private static final MySingleton instance = new MySingleton();

private MySingleton()
{
}

public void myMethod()
{

}
}
[/source]

MySingleton sınıfının sahip olduğu konstruktör private olduğu için bu sınıftan bir nesne oluşturmamız mümkün değildir. Bu sınıf bünyesinde ve MySingleton tipinde olan instance ismindeki sınıf değişkeni singleton nesnedir. Bu sınıf ilk kullanıldığında private olan konstruktör bir defaya mahsus olarak işlem göreceği için instance degişkeni bir singleton nesne haline gelecektir. Buradaki sorun, reflection yöntemleri kullanılarak private olan konstruktörün birden fazla singleton nesne oluşturmasını sağlayabilmektir. Bunun yanısıra eger MySingleton sınıfı Serializable interface sınıfını implemente ediyorsa, readResolve() metodunun da implemente edilmesi gerekmektedir, aksi taktirde deserializasyon esnasında yeni bir nesne oluşturulur ki, bu da singleton tasarım şablonunun mantığına ters düşer.

Java 1.5 den itibaren kullanıma sunulan Enum sınıfı ile singleton nesneler oluşturmak mümkündür. Bunun bir örneği aşağıda yer almaktadır.

[source language=’java’]
package com.kurumsaljava.com.designpatterns.singleton;

public enum MySingletonEnum
{
INSTANCE;

public void myMethod()
{

}
}
[/source]

MySingletionEnum.INSTANCE sadece ve sadece bir kere mevcut olan bir singleton değişkendir. Bunun yanısıra reflection metotları kullanılarak yeni bir singleton olmayan nesne oluşturulamaz. Ayrıca serializasyon işlemlerinde readResolve() kullanılmak zorunda kalmadan enum nesnesinin singletonluğu garanti edilmektedir. Tek elementli olan bir enum sınıfı singleton tasarım şablonunu implemente etmek i.in kullanılabilecek en iyi yöntemdir.

Intercepting Filter Tasarım Şablonu

Front Controller tasarım şablonunda, kullanıcıdan gelen isteklerin (request) merkezi bir yerde toplanarak, işlem yapıldığını daha önce görmüştük. Intercepting Filter tasarım şablonu ile, kullanıcının isteği (request) işleme alınmadan önce filtreler kullanılarak süzgeçten geçirilir. Örneğin bir filtre ile kullanıcının işlem öncesi login yaptığını konrol edebiliriz. Filtremiz, session (HttpServletSesion) içinde login bilgilerini bulamadığı taktirde, kullanıcıyı login sayfasına yönlendirebilir.

Aynı şekilde işlem tamamlandıktan sonra kullanıcıya gönderilecek cevap (response) filtreler yardımı ile modifike edilebilir.

Bu yazıyı PDF olarak edinebilirsiniz.

  Intercepting Filter Tasarım Şablonu (55.1 KiB, 7,467 yükleme)


EOF (End of Fun)
Özcan Acar

Builder Tasarım Şablonu

Daha önceki bölümlerde Abstract Factory tasarım şablonu ile değişik nesne ailelerinden nasıl nesneler üretildiğini incelemiştik. Builder tasarım şablonu da Abstract Factory tasarım şablonunda oldugu gibi istenilen bir tipte nesne oluşturmak için kullanılır. İki tasarım şablonu arasındaki fark, Builder tasarım şablonunun kompleks yapıdaki bir nesneyi değişik parçaları bir araya getirerek oluşturmasında yatmaktadır. Birden fazla adım içeren nesne üretim sürecinde, değişik parçalar birleştirilir ve istenilen tipte nesne oluşturulur.

Diğer bölümlerde olduğu gibi bir örnek üzerinde bu tasarım şablonunu yakından inceliyelim.

Bu yazıyı PDF olarak edinebilirsiniz.

  Builder Tasarım Şablonu (53.6 KiB, 9,175 yükleme)


EOF (End of Fun)
Özcan Acar

Service Locator Tasarım Şablonu

Business Delegate örneğinde, Service Locator Tasarım şablonunun nasıl uygulandığını görmüştük. Service Locator, işletme (business) katmanında bulunan komponentlerin lokalizasyonu için kullanılır

Bu yazıyı PDF olarak edinebilirsiniz.

  Service Locator Tasarım Şablonu (35.3 KiB, 6,726 yükleme)


EOF (End of Fun)
Özcan Acar

Business Delegate Tasarım Şablonu

Modern yazılım sistemleri birden fazla katmandan oluşur. Bu katmanlar her zaman aynı server üzerinde mevcut olmayabilir. Bu durumda bir katmandan diger katmana ulaşmak için remote call olarak isimlendirilen RMI operasyonları yapılır. Örneğin EJB teknolojisi ile hazırlanan komponentler birden fazla server üzerinde hizmet sunabilir. Bu komponentlere bağlanıp, işlem yapabilmek için RMI kullanılır. Continue reading

Chain of Responsibility Tasarım Şablonu

Chain of responsibility sorumluluk zinciri anlamına gelmektedir. Sisteme gönderilen bir istediğin (komut) hangi nesne tarafından cevaplanması gerektiğini bilmediğimiz durumlarda ya da isteği yapan nesne ve servis sağlayan nesne arasında sıkı bir bağ oluşmasını engellememiz gerektiğinde Chain of Responsibility tasarım şablonu kullanılır. Continue reading

Flyweight (Sinek Siklet) Tasarım Şablonu

Java dilinde yazılan programlar içinde sınıflar ve bu sınıflardan oluşturulan nesneler kullanır. Bazen aynı sınıftan yüzlerce, belki binlerce nesne oluşturup, kullanıyor olabiliriz. Bu gibi durumlarda çok nesne oluşturulduğu için sistem performansı kötüye gidebilir. Flyweight tasarım şablonu kullanılarak, kullanılan nesne adedini aşağıya çekebiliriz.

Bu satırlar oluşurken, büyük bir ihtimalle kullandığım editör flyweight tasarım şablonunu kullanıyor olabilir. Yazdığım her cümle kelimelerden, her kelime birden fazla harften oluşmaktadır. Kullandığım editörün Java dilinde yazıldığını ve her harf için bir nesne kullandığını farzedersek, bir satırlık doküman için 80 ila 100 arası harf nesnesi oluşturması gerekir. 100 satırlık bir doküman için bu 10.000 civarı harf nesnesinin oluşturulması anlamına gelir.

Bu yazıyı PDF olarak edinebilirsiniz.

  Flyweight (Sinek Siklet) Tasarım Şablonu (52.4 KiB, 9,080 yükleme)

Konuyla İlgili Kitaplar


EOF (End of Fun)
Özcan Acar

Proxy (Vekil) Tasarım Şablonu

Oluşturulmaları zaman alıcı ve sistem kaynaklarını zorlayan nesnelere vekalet eden nesnelere proxy nesneleri adı verilir. Bu nesneler vekil oldukları nesnelerin tüm metodlarına sahiptirler ve kullanıcı sınıf ile vekil olunan nesne arasında aracılık yaparlar. Vekil olan nesne, kullanıcı sınıfa, vekil olunan nesne gibi davranır ve kullanıcı sınıftan gelen tüm istekleri vekil olunan nesneye iletir. Böyle bir yapının kullanılmasının sebebi, gerek olmadığı sürece vekil olunan nesnenin oluşturulmasını engellemektir ya da vekil olunan nesneyi gizlemektir. Continue reading

Facade (Cephe) Tasarım Şablonu

Profesyonel yazılım sistemleri birçok komponentin birleşiminden oluşur. Yazılım esnasında bir çok ekip birbirinden bağımsız, sistemin bütününü oluşturan değişik komponentler üzerinde çalışırlar. Bir komponent, belirli bir işlevi yerine getirmek için hazırlanmış bir ya da birden fazla Java sınıfından oluşmaktadır.

Continue reading

Command (Komut) Tasarım Şablonu

Command tasarım şablonunu açıklamak için televizyonu uzaktan kumanda etme aletini metafer (mecazi örneklendirme) olarak kullanmak istiyorum. Kanalları değiştirmek için kumanda aleti üzerinde belirli bir tuşa basarız. Tusa basıldığı anda kumanda aleti televizyona bir komut göndererek, kanalın değişmesini sağlar. Aynı şekilde televizyonu açıp, kapatmak ve ses ve renk ayarlarını yapmak için değişik tuşlar kullanılır. Continue reading

Adapter Tasarım Şablonu

Adapter tasarım şablonu yardımı ile, sistemde mevcut bulunan bir sınıfın sunduğu interface (sınıf metodları) başka bir sınıf tarafından kullanilabilir şekilde değiştirilir (adapte edilir). Bu adapter yardımı ile birbiriyle beraber çalışamıyacak durumda olan sınıflar, birlikte çalışabilir hale getirilir.

Adapter tasarım şablonu kendi içinde sınıf ve nesne adapteri olarak ikiye ayrılır. Önce sınıf adapterini inceliyelim.

 

 

Bu yazıyı PDF olarak edinebilirsiniz.

  Adapter Tasarım Şablonu (2.0 MiB, 18,486 yükleme)

Konuyla İlgili Kitaplar

        

Strategy (Strateji) Tasarım Şablonu

Bir işlemi yapabilmek için birden fazla yöntem (algoritma) mevcut olabilir. Yerine göre bir yöntem seçip, uygulamak için Strategy tasarım şablonu kullanılır. Her yöntem (algoritma) bir sınıf içinde implemente edilir.

 

Bu yazıyı PDF olarak edinebilirsiniz.

  Strategy (Strateji) Tasarım Şablonu (200.1 KiB, 9,782 yükleme)

Konuyla İlgili Kitaplar

        

Iterator (Tekrarlayıcı) Tasarım Şablonu

Iterator tasarım şablonu ile bir listede yer alan nesnelere sırayla, listenin yapısını ve çalışma tarzını bilmek zorunluluğumuz olmadan erişebilir ve bu nesneler üzerinde işlem yapabiliriz.

UML diagramında Takim interface sınıfını implemente eden iki basketbol takımı yer almaktadır: Efes Pilsen ve Fenerbahçe Ülker Basketbol takımları. Ligde oynayan her takım için Takim interface sınıfını implemente eden bir sınıf oluşturulabilir. Takım içinde yer alan oyuncuları tutmak için her sınıf kendi bünyesinde bir liste oluşturabilir. Takim interface sınıfı, bu listenin yapısı hakkında bir zorunluluk getirmediği için her takım kendi listesini istediği yapıda oluşturabilir. EfesPilsen sınıfını incelediğimiz zaman, oyuncuların bir ArrayList içinde tutulduğunu görmekteyiz.

Bu yazıyı PDF olarak edinebilirsiniz.

  Iterator (Tekrarlayıcı) Tasarım Şablonu (207.4 KiB, 10,496 yükleme)

Konuyla İlgili Kitaplar

        

Data Access Object (DAO) Tasarım Şablonu

Birçok programın var olma nedeni veriler üzerinde işlem yapmak,verileri bilgibankalarında depolamak ve bu verileri tekrar edinmektir. Bu böyle olunca, verilerin program tarafından nasıl bilgibankalarına konulduğu ve tekrar edinildiği önem kazanmaktadır. Data Access Objects (DAO) tasarım şablonu ile, kullanılan veritabanına erişim ve veri depolama-edinme işlemi daha soyutlaştırılarak, diğer katmanların veritabanına olan bağımlılıkları azaltılır. DAO ile diğer katmanlar etkilenmeden veritabanı ve bilgibankası değiştirilebilir. Daha öncede belirttiğim gibi, amacımız birbirini kullanan ama birbirine bağımlılıkları çok az olan katmanlar oluşturmak ve gerekli olduğu zaman bir katmanı, diğer katmanlar etkilenmeden değiştirebilmek olmalıdır. Katmanlar arası bağımlılık interface sınıfları üzerinden olduğu sürece bu amacımıza her zaman ulaşabiliriz.

Bu yazıyı PDF olarak edinebilirsiniz.

  Data Access Object (DAO) Tasarım Şablonu (182.1 KiB, 21,117 yükleme)

Konuyla İlgili Kitaplar

      

Singleton (Tekillik) Tasarım Şablonu

Bazı şartlar altında bir sınıftan sadece bir nesnenin oluşturulması ve oluşturulan bu nesnenin
tüm sistemde kullanılması gerekebilir. Örneğin bilgibankası için bir connection pool
(bilgibankası bağlantı havuzu) sadece bir defa oluşturulmalı ve kullanılmalıdır. Bu durumda
Singleton tasarım şablonu kullanılarak, bir sınıftan sadece bir nesnenin oluşturulması
sağlanabilir.

Bu yazıyı PDF olarak edinebilirsiniz.

  Singleton (Tekillik) Tasarım Şablonu (136.1 KiB, 17,755 yükleme)

Konuyla İlgili Kitaplar

      

Tasarım Şablonu Nedir?

Yazılım esnasında tekrar eden sorunları çözmek için kullanılan ve tekrar kullanilabilir tipte kod yazılımını destekleyen bir ya da birden fazla sınıftan oluşmuş modül ve program parçalarına Tasarım Şablonu denir. Tasarım şablonları, programcılar tarafından edindikleri tecrübeler doğrultusunda oluşmuş kalıplardır. Bu kalıplar sorunu tanımlıyarak, çözümü için gerekli atılması gereken adımlari ihtiva ederler. Kullanıcı kalıbı, tanımlanmış sorunu çözmek için tekrar tekeri icat etmek zorunda kalmadan kullanabilir.

Tasarım şablonları aşağıda yeralan ortak özelliklere sahiptir:

  • Edinilen tecrübeler sonunda ortaya çıkmışlardır.
  • Tekerin tekrar icat edilmesini önlerler.
  • Tekrar kullanılabilir kalıplardır.
  • Ortak kullanılarak daha büyük problemlerin çözülmesine katkı sağlarlar.
  • Devamlı geliştirilerek, genel bir çözüm olmaları için çaba sarfedilir.

Program bakımı ve geliştirilmesi için ilk yazılım sürecinden daha çok enerji sarfedilir. Bu yüzden yazılım esnasında esnek bir yapının ve mimarinin oluşturulmasına dikkat edilmesi gerekmektedir. Esnek mimariler için değişik türde tasarım şablonları kullanılabilir. En basit ve uygulaması kolay bir tasarım şablonunun kullanılması, hiçbir tasarım şablonunun kullanılmamasından daha iyidir. İyi bir yazılım mühendisi olabilmek için tasarım şablonları ve kullanım alanları hakkında ihtisas yapmış olmak gerekmektedir.

 

Tasarım Şablonu Neden Kullanılır?

Her tasarım şablonunun belirli bir ismi vardır ve bu isim kullanıldığı zaman hangi tasarım şablonundan bahsedildiği hemen anlaşılır. Bu sebepten dolayı yazılım ekibinin kullanacağı ortak bir kelime hazinesi oluşur. Programcılar takım içinde tasarım şablonlarının isimlerini kullanarak, hangi sorunlar üzerinde çalıştıklarını kolaylıkla anlatabilirler. Bu durum ayrıca takım içinde tasarım şablonlarını tanımayan programcılar için duydukları tasarım şablonlarını öğrenmeye yönlendirecek bir motivasyon kaynağı oluşturur. Tasarım şablonlarının kullanılması konseptüel olarak bir üst seviyede çalışılmasını ve düşünülmesini sağlar. Nesneler seviyesinde sorunları çözmek her zaman kolay olmayabilir, lakin tasarım kalıpları seviyesinde düşünüldüğü zaman, problem çözüm işlemi kolaylaşır.

 

Tasarım Şablonu Kategorileri

Tasarım şablonları değişik kategorilere ayrılır. Bunlar:

  • Oluşturucu tasarım şablonları (creational patterns)
  • Yapısal tasarım şablonları (structual patterns)
  • Davranışsal tasarım şablonlar (behavioral patterns)

 

Oluşturucu

Yapısal

Davranışsal

– Abstract Factory (soyut fabrika)

– Builder (inşaatçi)

– Factory Method (fabrika)

– Prototype  (prototip)

– Singleton (yanlızlık)

– Adapter

– Bridge (köprü)

– Facade (cephe)

– Decorator (dekotatör)

– Composite (kompozit)

– Flyweight (sinek siklet)

– Proxy (vekil)

 

– Command (komut)

– Memento (hatıra)

– Strategy (strateji)

– Iterator (tekrarlayıcı)

– State (durum)

– Chain Of Responsibility (sorumluluk zinciri)

– Mediator (aracı)

– Observer (gözlemci)

– Template Method (şablon metot)

– Visitor (ziyaretçi)

 

Bu tasarım şablonları yanısıra J2EE Patterns olarak bilinen tasarım şablonlarını inceliyecegiz.

J2EE

– MVC

– Data Access Object

– Front Controller

– Business Delegate

– Intercepting Filter

– Service Locator

 

Abstract Factory (Soyut Fabrika)
Aynı sınıf ailesine ait nesnelerin oluşturulmasında kullanılır. Kullanılan altsınıfları gizliyerek, tranparen olarak kullanılmalarını mümkün kılar.

Builder (İnşaatçi)
Kompleks yapıdakı bir nesneyi değişik parçaları bir araya getirerek oluşturmada kullanılır. Birden fazla adım içeren nesne üretim sürecinde, değişik parçalar birleştirilir ve istenilen tipte nesne oluşturulur.

Factory Method (Fabrika)
Yeni nesneler oluşturmak için kullanılır. Nesnenin hangi somut sınıftan olacağına alt sınıf implementasyonu belirler.

Prototype (Prototip)
Sistem içinde kullanılan bazı nesnelerin oluşturulmaları, büyük ve değişik kaynakların kullandıklarından dolayı zaman alıcı olabilir. Bu gibi nesneleri new operatörü ile yeniden oluşturmak yerine, Prototype tasarım şablonu kullanılarak mevcut bir nesneden klonlanabilir. Bu şekilde oluşan nesne bir prototiptir ve set metodları kullanılarak istenilen özelliklere göre yapılandırılabilir.

Singleton (Yanlızlık)
Bazı şartlar altında bir sınıftan sadece bir nesnenin oluşturulması ve oluşturulan bu nesnenin tüm sistemde kullanılmasi gerekebilir. Singleton tasarım şablonu kullanılarak, bir sınıftan sadece bir nesnenin oluşturulması sağlanabilir.

Adapter
Adapter tasarım şablonu yardımı ile, sistemde mevcut bulunan bir sınıfın sunduğu interface (sınıf metotları) başka bir sınıf tarafından kullanılabilir şekilde değiştirilir (adapte edilir). Bu adapter yardımı ile birbiriyle beraber çalışamıyacak durumda olan sınıflar, birlikte çalışabilir hale getirilir.

Bridge (Köprü)
Bridge tasarım şablonu, modelleme esnasında oluşan soyut oluşumlar ve bunların implementasyonunu ayırmak için kullanılır. Bu yöntem sayesinde sınıf hiyerarşileri daha esnek bir hale getirilebilir, çünkü üst sınıflar bünyelerinde barındırdıkaları soyut metodları bir interface sınıfına taşıyarak, alt sınıfların istedikleri bir implementasyonu kullanmalarına izin verirler.

Facade (Cephe)
Bir komponentin sunmuş olduğu hizmetten yararlanabilmek için, komponentin dış dünya için tanımlamış olduğu giriş/çıkış noktaları (input/output interface) kullanılır. Komponent sadece bu giriş/çıkış noktaları üzerinden dış dünya ile iletişim kurar ve iç dünyasını tamamen gizler. Bu komunikasyon noktaları genelde Facade tasarım şablonu kullanılarak programlanır.

Decorator (Dekoratör)
Mevcut bir sınıf hiyerarşisini ya da sınıfın yapısını değiştirmeden, oluşturulan nesnelere yeni özelliklerin eklenmesi işlemini gerçekleştirmek için decorator tasarım şablonu kullanılır.

Composite (Kompozit)
Composite tasarım şablonu, bir sistemin bütünü ve parçaları arasındaki ilişkileri modellemek için kullanılır. Sistemin bütününü oluşturan parçalar, kendi içlerinde alt parçalardan oluşabilir. Composite tasarım şablonu, kullanıcı sınıfın, sistem, sistemin parçaları ve alt parçalar arasında ayrım yapmadan nesneleri kullanmasına izin verir. Bu şekilde sistem yazılımı ve kullanımı daha sadeleştirilmis olur.

Flyweight (Sinek Siklet)
Flyweight tasarım şablonunu kullanılarak, kullanılan nesne adedi aşağıya çekilebilir.

Proxy (Vekil)
Bir nesnenin kullanımını kontrol etmek için Proxy tasarım şablonu ile, korunması gereken nesneye vekilen bir nesne oluşturulur.

Command (Komut)
Bir nesne üzerinde bir işleminin nasıl yapıldığını bilmediğimiz ya da kullanılmak istenen nesneyi tanımadığımız durumlarda, command tasarım şablonu ile yapılmak istenen işlemi bir nesneye dönüştürerek, alıcı nesne tarafından işlemin yerine getirilmesi sağliyabiliriz.

Memento (Hatıra)
Bir nesneyi, daha önce sahip olduğu bir duruma tekrar dönüştürebilmek için Memento tasarım şablonu kullanılır.

Strategy (Strateji)
Bir işlemi yerine getirmek için birden fazla yöntem (algoritma) mevcut olabilir. Yerine göre bir yöntem seçip, uygulamak için Strategy tasarım şablonu kullanılır. Her yöntem (algoritma) bir sınıf içinde implemente edilir.

Iterator (Tekrarlayıcı)
Iterator tasarım şablonu ile bir listede yeralan nesnelere sırayla, listenin yapısını ve çalışma tarzını bilmek zorunluluğu olmadan erişilir ve bu nesneler üzerinde işlem yapalır.

State (Durum)
State tasarım şablonu kullanarak, bir nesnenin davranışı, sahip olduğu değerler değiştiği zaman değiştirilebilir. Bu durumda sanki nesne sahip olduğu sınıfı değiştirmiş gibi olacaktır.

Chain Of Responsibility (Sorumluluk Zinciri)
Chain of responsibility sorumluluk zinciri anlamına gelmektedir. Sisteme gönderilen bir istediğin (komut) hangi nesne tarafından cevaplanması gerektiğini bilmediğimiz durumlarda ya da isteği yapan nesne ve servis sağlayan nesne arasında sıkı bir bağ oluşmasını engellememiz gerektiğinde Chain of Responsibility tasarım şablonu kullanılır. Bu tasarım şablonunda servis sağlayan ilgili tüm nesneler bir kolye üzerindeki boncuklar gibi birbirleriyle ilişkili hale getirilir. Bir nesne zincirdeki kendinden sonraki nesneyi tanır ve isteği kendi cevaplayamadığı durumda, kendinden sonraki nesneye iletir. Bu işlem, zincirde bulunan doğru servis saglayıcı nesneyi bulana kadar devam eder.

Mediator (Aracı)
Mediator tasarım şablonunu nesnelerin yönetimi ve aralarındaki komunikasyonun merkezi bir noktadan koordinasyonu için kullanılır. Bu nesneler arasındaki bağı azaltır ve sadece bir sınıfı komunikasyonu koordine etmekle sorumlu kılar.

Observer (Gözlemci)
Sistem bünyesinde, bir nesnede meydana gelen değişikliklerden haberdar olmak isteyen diğer nesneler olabilir. Bu durumda haberdar olmak isteyen nesneler abone olarak, abone oldukları nesnede meydana gelen değişikliklerden haberdar edilirler. Abone olan nesne aboneliğini iptal ederek, abone olduğu nesne ile arasındakı ilişkiyi sonlandırabilir.

Template Method (Şablon Metot)
Template method ile bir algoritma için gerekli işlemler soyut olarak tanımlanır. Alt sınıflar algoritma için gerekli bir yada birden fazla işlemi kendi bünyelerinde implemente ederek, kullanılan algoritmanın kendi istekleri doğrultusunda çalışmasını sağlıyabilirler.

Visitor (Ziyaretçi)
Visitor tasarım şablonu, bir sınıf hiyerarşisinde yeralan sınıflar üzerinde değişiklik yapmadan, bu sınıflara yeni metodların eklenmesini kolaylaştırır. İstenilen metod bir visitor sınıfında implemente edilir.

MVC
MVC (Model – View – Controller) kullanılarak değişik görevleri olan katmanlar oluşturmak mümkündür. MVC tasarım şablonu özellikle web frameworklerinde (Struts, Spring MVC..) sıkça kullanılan bir tasarım şablonudur.

DAO
Data access objects (DAO) tasarım şablonu ile, kullanılan veritabanına erişim ve veri depolama-edinme işlemi daha soyutlaştırılarak, diğer katmanların veritabanına olan bağımlılıkları azaltılır. DAO ile diğer katmanlar etkilenmeden veritabanı ve bilgibankası değiştirilebilir.

Front Controller
Front Controller tasarım şablonu ile sisteme yöneltilen tüm istekler (request) merkezi bir yerde toplanarak işlem görürler.

Business Delegate
Business Delegate tasarım şablonu ile, kompleks yapıda olabilecek işletme (business) katmanı ile gösterim (presentation) katmanı arasına, gösterim katmanı isteklerini işletme katmanına delege edecek BusinessDelegate isminde bir sınıf yerleştirilir. Bu sınıfın öncelikli görevi, işletme katmanında yeralan EJB komponentlerini lokalizasyonu için gerekli lookup işlemlerini gösterim katmanı için transparan hale getirmektir.

Intercepting Filter
Intercepting Filter tasarım şablonu ile, kullanıcının isteği işleme alınmadan önce filtreler kullanılarak süzgecten geçirilir.

Service Locator
Service Locator, işletme katmanında bulunan komponentlerin lokalizasyonu için kullanılır.

Tasarım şablonları hakkında detaylı bilgiyi Java Tasarım Şablonları ve Yazılım Mimarisi isimli kitabımda bulabilirsiniz.