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

Hatırlayıcı ( Memento ) Tasarım Deseni

Bir nesnenin durumunu saklayıp, daha sonra bu duruma tekrar geri dönebilmesini sağlayan tasarım desenidir. Örneğin bir kelime işlemcide en son yapılan işlem gerçekleşmeden önceki duruma dönmeyi sağlayan "geri dön" özelliğinde bu tasarım deseni kullanılabilir. Kısaca nesnenin bazı durumlarını saklamak ve bu durumlara geri dönüş yapabilmeyi sağlar.

Örnek Uygulama

Hatırlayıcı tasarım deseni örneğinin konusu döküman yazan bir programın "geri al" işlevi ile ilgilidir. Bu program döküman içeriklerini Döküman isimli bir sınıfta tutmaktadır. Döküman sınıfının içeriğini de, ileriki kullanımlar için saklayan DökümanHatırlayıcı sınıfıdır. Bu sınıf tasarım desenindeki hatırlayıcı sınıfımızdır. Döküman ve her bir döküman yazma haretekini tutan DökümanHatırlayıcı nesnelerinin listesini tutan DökümanYazımProgramı sınıfıdır. Bı sınıfa her bir yeni döküman içeriği geldiğinde, bu içeriğe bağlı bir tane hatırlayıcı nesne yaratılır ve bu nesne de, hatırlayıcı nesnelerin listesine eklenir. Bu sınıftaki geriAl yordamı ise, listedeki en son döküman içeriğini tutan hatırlayıcı nesneyi çeker ve döküman içeriğini bu hatırlayıcı nesnenin içindeki içerik olarak ayarlar. Sistemi kullanan Kullanıcı sınıfını incelersek, sırayla "1", "2", "3", "4" içerikleri gelmiştir. Sonra da üç kere geri al işlevi çalıştırılmıştır. Bu işlemden sonra döküman içeriğinin üç işlem gerideki "1" olduğu görülmüştür.

/**
*
@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.memento;

/**
* Döküman.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Döküman {

 
private String  içerik;

 
public String içerikAl() {
   
return içerik;
 
}

 
public void içerikAta( final String içerik ) {
   
this.içerik = içerik;
 
}

 
public DökümanHatırlayıcı hatırlayıcıYarat() {
   
return new DökümanHatırlayıcı( this );
 
}

 
public void hatırlayıcıAta( final DökümanHatırlayıcı hatırlayıcı ) {
   
this.içerik = hatırlayıcı.içerikAl();
 
}
}
/**
*
@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.memento;

/**
* DökümanHatırlayıcı.java
*
* Tarih bilgisi : May 24, 2014
*/
public class DökümanHatırlayıcı {

 
private final String  içerik;

 
public DökümanHatırlayıcı( final Döküman döküman ) {
   
this.içerik = döküman.içerikAl();
 
}

 
public String içerikAl() {
   
return içerik;
 
}
}
/**
*
@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.memento;

import java.util.ArrayList;
import java.util.List;

/**
* DökümanYazımProgramı.java
*
* Tarih bilgisi : May 24, 2014
*/
public class DökümanYazımProgramı {

 
private final Döküman            döküman;
 
private final List< DökümanHatırlayıcı >  geçmişListesi  = new ArrayList< DökümanHatırlayıcı >();

 
public DökümanYazımProgramı( final Döküman döküman ) {
   
this.döküman = döküman;
 
}

 
public void dökümanYaz( final String yeniİçerik ) {
   
final DökümanHatırlayıcı hatırlayıcı = döküman.hatırlayıcıYarat();
    geçmişListesi.add
( hatırlayıcı );

    döküman.içerikAta
( yeniİçerik );
 
}

 
public void geriAl() {
   
final DökümanHatırlayıcı hatırlayıcı = geçmişListesi.remove( geçmişListesi.size() - 1 );
    döküman.hatırlayıcıAta
( hatırlayıcı );
 
}
}
/**
*
@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.memento;

/**
* Kullanıcı.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Kullanıcı {

 
public static void main( final String[] args ) {
   
final Döküman döküman = new Döküman();
    döküman.içerikAta
( "" );

   
final DökümanYazımProgramı program = new DökümanYazımProgramı( döküman );
    program.dökümanYaz
( "1" );
    program.dökümanYaz
( "2" );
    program.dökümanYaz
( "3" );
    program.dökümanYaz
( "4" );

   
// En son içerik "4" yazılır.
    // Fakat önceki içerikler saklanır.
   
System.out.println( "En son içerik : " + döküman.içerikAl() );

   
// Son üç işlem geri alınır.
   
program.geriAl();
    program.geriAl
();
    program.geriAl
();

   
// Son üç işlem geri alındığı için, "1" içeriği yazılır.
   
System.out.println( "Üç işlem geri alındıktan sonra içerik : " + döküman.içerikAl() );
 
}
}
En son içerik :4
Üç işlem geri alındıktan sonra içerik :1

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