Tasarım Desenleri
Nesneye Dayalı Programlamada Sınıf İlişkileri Nasıl Olmalı?
Testçiler sizin düşmanınız değildir. Esas düşman yazılım hatalarıdır!
Davranışsal Tasarım Desenleri

Durum ( State ) Tasarım Deseni

Nesnenin durumu değiştiğinde, davranışı da değişiyorsa, yani nesneler farklı durumlarda, farklı davranışlar gösteriyorsa, durum tasarım deseni kullanılabilir. Bu tasarım deseninin kullanılması, nesnelerin durumlarına bağlı değişen davranışlarının karmaşık "if/else" veya "switch" ifadeleriyle kontrol edilmesini önler.

Örnek Uygulama

Örnekte durumu çalışma zamanında değişen banka hesabı vardır. Banka hesaplarının durumları HesapDurumu arayüz sınıfından türemektedir. Bu arayüz sınıfından türeyen NormalHesap ve AltınHesap sınıfları bulunmaktadır. Bu alt sınıfların para çekme ve faiz ödeme davranışları farklıdır. İçerik sınıfı olan Hesap sınıfı hesap durum nesnesini içermektedir. Hesap durumuna göre de bu sınıf hesap içeriğini kontrol etmektedir. İstemci sınıfı olan Müşteri sınıfında bir tane hesap nesnesi bulunmaktadır. Çalışma zamanında hesabın durumu normal hesaptan altın hesaba çevrilmektedir. Durum değiştikten sonra da, nesnenin davranışı değişmektedir.

/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.state;

/**
* HesapDurumu.java
*
* Tarih bilgisi : May 24, 2014
*/
public interface HesapDurumu {

 
void paraÇek();

 
void faizÖde();
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/

package com.ilkerkonar.td.desen.ornekkodlar.state;

/**
* NormalHesap.java
*
* Tarih bilgisi : May 24, 2014
*/
public class NormalHesap implements HesapDurumu {

 
@Override
 
public void faizÖde() {
   
System.out.println( "Normal hesaptan faiz ödendi." );
 
}

 
@Override
 
public void paraÇek() {
   
System.out.println( "Normal hesaptan para çekildi." );
 
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.state;

/**
* AltınHesap.java
*
* Tarih bilgisi : May 24, 2014
*/
public class AltınHesap implements HesapDurumu {

 
@Override
 
public void faizÖde() {
   
System.out.println( "Altın hesaptan faiz ödendi." );
 
}

 
@Override
 
public void paraÇek() {
   
System.out.println( "Altın hesaptan para çekildi." );
 
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/

package com.ilkerkonar.td.desen.ornekkodlar.state;

/**
* Hesap.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Hesap {

 
private HesapDurumu  hesapDurumu;

 
public Hesap() {
   
hesapDurumu = new NormalHesap();
 
}

 
public void faizÖde() {
   
hesapDurumu.faizÖde();
 
}

 
public void paraÇek() {
   
hesapDurumu.paraÇek();
 
}

 
public void durumDeğiştir( final HesapDurumu hesapDurumu ) {
   
this.hesapDurumu = hesapDurumu;
 
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.state;

/**
* Müşteri.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Müşteri {

 
public static void main( final String[] args ) {
   
// Yaratılan hesap varsayılan olarak 'normal' durumda.
   
final Hesap hesap = new Hesap();
    hesap.faizÖde
();
    hesap.paraÇek
();

   
// Çalışma zamanında hesap durum değiştiriliyor.
    // Müşteri altın hesaba geçiriliyor.
   
hesap.durumDeğiştir( new AltınHesap() );

    System.out.println
( "Müşteri altın hesaba geçiriliyor." );

   
// Durum değiştiği için davranış da değişecek.
   
hesap.faizÖde();
    hesap.paraÇek
();
 
}
}
Normal hesaptan faiz ödendi.
Normal hesaptan para çekildi.
Müşteri altın hesaba geçiriliyor.
Altın hesaptan faiz ödendi.
Altın hesaptan para çekildi.

Yorumlar

Henüz bu sayfa için bir yorum yapılmamıştır.

Yorum Yaz, Düşüncelerini Paylaş

Not: Zorunlu alanlar yıldız (*) ile belirtilmiştir.

Kişisel Bilgiler

E-posta adresiniz kimse ile paylaşılmayacaktır. Gerekli olduğunda sizinle iletişim sağlamak için kullanılacaktır.

Yorum Alanı
Giriş Kontrol


Tüm java kodları "jdk1.7.0_09" ile derlenmiş ve çalıştırılmıştır.

Tüm hakları saklıdır. ©  "İlker KONAR" | İletişim: bilgi@tasarimdesenleri.com