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!
Yapısal Tasarım Desenleri

Hafif Ağırlık ( Flyweight ) Tasarım Deseni

Çok sayıda nesnenin sistemde olduğu durumlarda, nesne sayısının sistemde problemlere neden olmaması için kullanılan tasarım desenidir. Çünkü çok sayıda nesne kullanmanın maliyeti yüksektir. Yeni nesneler oluşturmadan mevcut nesneleri kullanma mantığına göre çalışır. Hafif ağırlık nesnelerini bir koleksiyonda tutmak gerekir. Tutulan nesnelerin durumları az ise, ortak nesnelerin sayısı azalır. Böylece bu koleksiyonun büyüklüğü de azalmış olur.

Örnek Uygulama

Örnekte bir sözcük işlemcisi, kendisine verilen bir metindeki karakterleri ekrana yazdırmakla görevlidir. Her bir karakterin ekrana yazdırma işlemi farklı olduğu için, her bir karakter için ayrı bir Karakter sınıfı yaratılacaktır. Gelen metindeki bir çok karakter ve bunların ekrana yazdırılma işlemleri aynı olduğundan, okunan her bir karakter için ayrı sınıf oluşturmak sisteme yük getirir. Bunun yerine KarakterYaratıcısı ismindeki yaratıcı sınıf karakterleri bir havuzda tutmaktadır. İstemci sınıf olan Sözcükİşlemcisi sınıfı da her okuduğu karakter için ilk önce havuza bakmaktadır. Havuzda bulursa, bu hazır nesneyi kullanmakta, bulamazsa da yeni bir nesne yaratıp bunu kullanmaktadır. Tabi yeni yarattığı nesneyi de, ileriki kullanımlar için tekrar havuza koymaktadı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.flyweight;

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

 
private final char  karakter;

 
public Karakter( final char karakter ) {
   
this.karakter = karakter;
 
}

 
public void ekranaBas() {
   
System.out.println( "Ekrana basıldı: " + karakter );
 
}
}
/**
*
@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.flyweight;

import java.util.HashMap;
import java.util.Map;

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

 
private final Map< Character, Karakter >  karakterHavuzu  = new HashMap< Character, Karakter >();

 
public Karakter karakterAl( final char karakter ) {

   
// Havuzda varsa onu dön. Yeni nesne oluşturma.
   
if ( karakterHavuzu.containsKey( karakter ) ) {
     
return karakterHavuzu.get( karakter );
   
}

   
// Havuzda yoksa, yeni oluştur bunu dön,
    // havuza da ileriki kullanımlar için ekle.
   
final Karakter yeniKarakter = new Karakter( karakter );
    karakterHavuzu.put
( karakter, yeniKarakter );

   
return yeniKarakter;
 
}
}
/**
*
@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.flyweight;

/**
* Sözcükİşlemci.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Sözcükİşlemci {

 
public static void main( final String[] args ) {

   
final String satır = "Merhaba, nasılsın?";

   
// Hafif ağırlık sınıfı, karakterlerin listesini tutar.
   
final KarakterYaratıcı karakterYaratıcı = new KarakterYaratıcı();

   
// Satırdaki her bir bilgiyi ekrana bas.
   
for ( final char c : satır.toCharArray() ) {
     
final Karakter karakter = karakterYaratıcı.karakterAl( c );
      karakter.ekranaBas
();
   
}
  }
}
Ekrana basıldı: M
Ekrana basıldı: e
Ekrana basıldı: r
Ekrana basıldı: h
Ekrana basıldı: a
Ekrana basıldı: b
Ekrana basıldı: a
Ekrana basıldı: ,
Ekrana basıldı:
Ekrana basıldı: n
Ekrana basıldı: a
Ekrana basıldı: s
Ekrana basıldı: ı
Ekrana basıldı: l
Ekrana basıldı: s
Ekrana basıldı: ı
Ekrana basıldı: n
Ekrana basıldı: ?

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