Tasarım Şablonları Nedir ve Neden Kullanılır(Factory, Prototype, Abstarct Factory, Singletion, Builder, Facade, Decorator, Adapter, Bridge, Composite, Flyweight, Proxy, Command, Iterator, Chain-of Responsibility, Strategy, Visitor, Template, Memento, Observer, Mediator, State, Interpreter)
Haziran 10, 2010 | Comments | Java Tasarım Şablonları
Tsarım şablonu nedir
Yazılımcıların tecrübeleri sonucu ortaya çıkan vebelirli problemleri çözmede etkili olan ve tekrarkullanılabilen kalıplardır. Genelde interfaceveya abstract class kullanılır.
Oluşturucu Tasarım Kalıpları
1. Factory(Fabrika)
Soyut olarak tanımlanmış sınıflardan nesne oluşturabilmek için kullanılır. Frameworklerdekullanılır. Nesneler arası ilişkiler tanımlamakiçin soyut sınıflar frameworklerde kullanmak zorundadır.Bu sınıflardan new ile nesne oluşturmayıfabrika şablonun amacıdır. Verilen parametreyegöre nesne oluşturur. Nasıl oluşturulduğuyla ilgilenmiyor.
2. Prototype(Prototipe)
Birebir clonlıyoruz. Kopyasını aldıktan sonraistediğimiz özelliği değiştiririz. New ile yeninesne türetme fazla iş getirdiği durumlarda bunukullanırız. Eğer sistem çok karmaşıksa nesne türetmekyerine kopyasını almak daha avantajlıdır. Bunun içincloneable interfacesini implement etmek zorundayız.
3. Abstarct Factory(Soyut Fabrika)
Fabrika oluşturan bir fabrikadır. Birbiriyle ilişkiliolan nesne grupları oluşturmada kullanılır.Bu kalıp sayesinde somut sınıflarda hakkında bilgimizolmadan birbirleriyle ilgili ya da bağımlı nesneler oluşturabiliriz.
4. Singletion(Tekil)
Bir sınıftan sadece tek bir nesneoluşturulması ve tüm sistemin bu nesneyikullanmasını sağlamak için kullanılır.
5. Builder(Inşaatçı)
Karmaşık bir nesnenin oluşturulmasıyla temsilinibirbirinden ayırır. Böylece aynı oluşturma süreciylefarklı temsiller oluşturulabilir. Karmaşık nesneyideğişik parçaları bir araya getirilerek oluşturulur.Tıp kı inşaata kullanılan malzemelerinbirleştirilmesinden binanın meydana gelmesi gibi.
Yapısal Tasarım Kalıpları
1. Facade(Ön Cephe)
Binaya bakınca ön yüzünü görüyoruz, içindekilerigöremiyoruz. Facade bu içindeki karmaşık sistemikullanarak bize basit bir kullanım sağlar.Yani karmaşıklığı soyutlar ve biz de basit ara yüzile işlemlerimizi gerçekleştiriyoruz.
2. Decorator(Dekore Etmek-Yeniden Düzenlemek)
Var olanı düzenlemeyi amaçlar. Örneğin bir evimizvar ve evin içini düzenliyoruz. Yeniden evyapmıyoruz sadece var olan evi düzenliyoruz.
<
br />
3. Adapter(Adapte Etme)
Sınıfların metotlarını istediğimiz bir şekleadapte etmektir. Yani var olan bir sınıfın arayüzünü(metotlarını) bu sınıfı kullanmak isteyenkişinin istediği bir ara yüze dönüştürmektir.
4. Bridge(Köprü)
Bir sınıfın ara yüzünü gerçekleştiriminden ayırmakiçin kullanılır. Böylece ikisi de ayrı ayrı yapılabilir.Bir sınıfın yapacağı işler belirli ise fakat aynıiş farklı sistemlerde farklı farklı yapılacaksabu şablon kullanılır. Örneğin bir uygulamahem Linux hem de windowsta çalışabilmesi buşablonun kullanması lazım.
5. Composite(Kompozit)
Composit nesneleri bir ağaç yapısı şeklinde birleştirmekiçin kullanılır. Bir parça-bütün ilişkisi sunar.Bir nesne içinde bir veya birden fazla aynı tipnesne tutar ve bu nesnelerin her birinde aynışekilde bir veya birden fazla nesne tutabilir.Yani bir sistemin bütünü ve parçaları arasındakiilişkiler modellemek için kullanılır. Sisteminbütününü oluşturan parçalar, kendi içlerinden altparçalardan oluşabilir. Composite kullanıcı sınıfın,sistem, sistemin parçaları ve alt parçalar arasındaayrım yapmadan nesneleri kullanmasına izin veriri.Bu şekilde sistemin kullanımı ve yazılımıdaha sadeleştirilmiş olur.
6. Flyweight
Basit nesneler oluşturmak istiyorsanız ve bu nesnelerinbazı veri değerleri farklıysa bu şablon kullanılır.Nesnelerden çok fazla üretmek yerine bir tane oluşturup,farklı veri değerlerini paratmetre olarak göndermekavantajlı olur. Mesela aaa, bbb her bir a veya b içinfarklı nesneler üretmek yerine aynı harfler içintek nesne türeterek sadece konumları farklı olanıbir metot parametresiyle aynı nesneyi çağırarakharfi bastır. Örneğin kelime işleme uygulamasındakiher harf için bir nesne oluşturmaktansa harfin birkopyası oluşturulur ve kullanılacağıyerde bu kopyanın referansı kullanılır.
7. Proxy(vekil)
Proxy nesnesi karmaşık bir nesneyi basit birnesne olarak sunmak amacıyla kullanılır.Gerçek nesneye ihtiyaç duyulmayana kadar oluşturulmaz.Bunun yerine Proxy nesnesi kullanılır. Gerçek nesneyeihtiyaç duyulana kadar durumu idare eder. Eğer birre style="background-color:#ffffff;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:11px;margin:0;">nesneyi oluşturmak çok zaman veya kaynak(bellek, işlemci..)
gerektiriyorsa, Proxy nesnesi bu oluşturmayı
size gerçek nesneye ihtiyaç duyana kadar erteler.
Karmaşık nesneden bir tane oluşturulur, karmaşık
nesneye referans içeren Proxy nesneleri oluşturulur.
Bu Proxy nesnelerine yapılan çağrılar asıl karmaşık
nesneye yönlendirilir. Bu şekilde bir karmaşık
nesne ve bu nesne gibi davranan Proxy nesneleri olur.
Davranışsal Tasarım Kalıpları
1. Command(Komut)
Yapılacak her bir işi sadece bir nesneyleilişkilendirerek farklı işleri farklı nesnelerleyapmaktır. Yani bir nesne sadece bir iş yapsın.Mesela yazdırma işini sadece bir nesneyle ilişkilendiririz.Bu nesne yazdırma işiyle alakalı bilgilerikendi içinde tutar. Bu avantaj sağlar. Bir işidirekt nesne ile ilişkilendirince işle ilgilidiğer bilgiler de nesne içinde tutulur. Örneğin wordbelgesine bir şey yazdık ve Ctrl+Z ile geri aldık.Bu işlem komut nesnesiyle sağlanılır. Macro videokaydı gibidir. Yapılan işlemleri kaydeder.Çalıştırınca sırayla gösterir. Commandın temel amacıyapılacak işleri nesnelere bölmektir.
2. Iterator(Tekrarlayıcı)
Bir koleksiyon tipli nesnelerin içerisindekielemanlara bu koleksiyonun iç yapısını bilmedensıralı olarak erişmek için kullanılır. Örneğinbir ArrayList kullanınca ArrayList’e ait get()metodunu bilmemiz lazım. Ama iterator şablonuile bu get() metodunu bilmeden sırayla elemanlaraerişebiliriz. Avantajı Collection’un iç yapısını( her bir veri tipine özel metodları mesela listiçin get(), stack için put()) bilmemize gerek kalmıyor.
3. Chain-of Responsibility
Bunu kullanan sınıflar bağlı liste şeklinde bağlılar.Örneğin kulaktan kulağa oynanan oyun gibi. Bir istekbirden fazla kişi tarafından işlenecekse ve hangileriişleyeceği belli olmadığı durumlarda kullanılır.Bir mesajım var ve herkese iletiyorum ama o mesaj kimiilgilendirirse o alıp ona göre işlem yapar. Mesela birseçmeli ders yok. Bu bilgiyi 3.sınıf öğrencilerinhepsine yolluyorum ama ders seçmeli olduğundansadece o dersi alan okula gelmez. Diğer öğrencileribağlamıyor. İkinci bir kullanımı ise bir işe yapılacakama kimin yaptığı önemli değil. Mesela çöp dökülecekbirinin dökmesi lazım. Bir kişi çöpü döktüğünde iş biter.Kimin çöpü döktüğü önemli değil. Sadece çöpüdökme işlemi gerçekleşmesi önemlidir.4. Strategy(Strateji)
Birçok sıralama algoritmasından strateji kalıbı ileiçlerinden istediğimizi kullanmamızı sağlar.Algoritmaları sınıfın içinde yazmak yerine bu şablonda yazılır.Esneklik sağlar. Aksi halde hangi algoritmayıkullanacağımızı sınıfın içinde tanımlamalıyız.Eğer kullanacağımız algoritma belli değilse bir sürüalgoritma sınıfın içinde tanımlamak zorunda kalırız.5. Visitor(Ziyaretçi)
Sınıf hiyerarşisini bozmadan bazı sınıflara yenimetot eklemeyi sağlar. Decoratorda mevcut olanı düzenliyoruz.Ama visitorda yeni metot ekliyoruz. Ziyaretedileceği kişiye özel olduğundan somuttur.Ikinci bir kullanımı ise sende olmayan bir özelliksenin için biri yapıyor. Yani sen bir şeyi yapmayıbilmiyorsun biri gelip senin için o işi yapıyor.6. Template(Şablon)
A sınıfı B sınıfından bazı şeyleri yapmasını istiyor.Fakat A B nin nasıl yaptığını bilmeyecek.Örneğin sınıfta herkes Java bilecek. Fakat nasılöğreneceksen öğren hocayı ilgilendirmez.7. Memento
Bir nesneyi, daha önce sahip olduğu bir durumatekrar dönüştürebilmek için kullanılır.Örneğin word belgesinde geri al Ctrl + Z gibi.Command memento içinde kullanılır.8. Observer(Gözlemci)
Genelde (üye ol/yayınla) programındaki bir nesnenindurumunu takip etmek için kullanılır. Takip ve haberverme şablonudur. Nesnenin durumunda bir değişiklikolduğunda bize haber verir. Böylece sürekli nesneyigidip acaba durumunda değişiklik oldu mu diye kontroletmeye gerek kalmıyor. Bütün observerlar aynı metodismine sahiptir. Mesela buton tıklandığında kendisibana haber verir. Yani içindeki kodları çalıştırır.Ben sürekli gidip tıklanıp tıklanmadığını kontrol etmiyorum.9. Mediator(Arabulucu)
Uygulamadaki çeşitli sınıfların birbirleriyleiletişim kurmasını sağlayan bir nesnedir.Amacı arabuluculuk yapmaktır. Mesela uçaklar inipkalkışta sadece kulelerle iletişime geçerler.Uçaklar birbiriyle haberleşmezler bu durumda.Diğer bir örnek msn sunucusu. Birden fazla nesnem varbirbiriyle mesajlaşmak istiyor. Bunu sunucu düzenliyor.Direkt kullanıcılar birbiriyle iletişime geçemiyor.Sunucu bu iletişimi sağlıyor.10. State(Durum)
State kalıbını kullanarak bir nesnenin davranışı,sahip olduğu değerler değiştiği zaman değiştirilebilir.Bu durum sanki nesne sahip olduğu sınıf değiştirilmiş olur.Bir nesnenin sahip olduğu duruma göre(değişkenlerin değeri)davranışını(sahip olduğu metotlar) değiştirilebilir bu kalıpla.11. Interpreter(Yorumlayıcı)
Verilen bir dilin sunumu ve yorumlanması için kullanılır.Bu şablon dildeki gramer kuraların her biri içinbir sınıf kullanır. Genelde özel amaçlı bir diltasarımı ve yorumlamasında kullanılır.Bütün tasarım kalıpları esneklik sağlıyor.

