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

Dekorasyon ( Decorator ) Tasarım Deseni

Bu desen, nesneye ek özellikler eklemek için kullanılır. Bu özellikler eklenirken, esas nesnenin bundan haberi yoktur, bu nesnede kod değişikliği gerekmez. Ayrıca nesnenin özeliklerini arttırmak için, temel nesneden türetilip de, yeni nesneler yaratılmasına gerek olmaz. Yani bu desen, bir nesneye alt sınıflar yaratılmaksızın, dinamik olarak yeni özellikler kazandırmak için kullanılır.

Örnek Uygulama

Örnekte, bir telefon nesnesine dekorasyon ile yeni özellikler kazandırılacaktır. Basit telefon nesnesine mms ve kamera özellikleri dekorasyon tasarım deseni ile nasıl eklendiği örneklenmiştir. Örnekte görüldüğü gibi ek özellikler Telefon nesnesinden yeni çeşitli nesneler türetilip alt sınıflar oluşturmak ile değil de, bunun yerine Telefon arayüzünden türemiş bir dekorasyon nesnesinden türeyen çeşitli özellikler kazandıran dekorasyon nesneleriyle yapılmaktadır. Her bir dekarasyon sınıfı, Telefon nesnesine yeni özellikler kazandırmaktadır. Dekarasyon sınıfları aynı nesneden ( Telefon ) dan türedikleri için örnekte olduğu gibi iç içe kullanılabilirler.

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

/**
* Telefon.java
*
* Tarih bilgisi : May 23, 2014
*/
public interface Telefon {

 
void telefonuOluştur();
}
/**
*
@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.decorator;

/**
* BasitTelefon.java
*
* Tarih bilgisi : May 23, 2014
*/
public class BasitTelefon implements Telefon {

 
@Override
 
public void telefonuOluştur() {
   
System.out.println( "Basit telefon oluştu." );
 
}
}
/**
*
@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.decorator;

/**
* TelefonDekarasyoncusu.java
*
* Tarih bilgisi : May 23, 2014
*/
public abstract class TelefonDekarasyoncusu implements Telefon {

 
protected Telefon  dekoreTelefon;

 
public TelefonDekarasyoncusu( final Telefon telefon ) {
   
dekoreTelefon = telefon;
 
}
}
/**
*
@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.decorator;

/**
* MMSliTelefonDekarasyoncusu.java
*
* Tarih bilgisi : May 23, 2014
*/
public class MMSliTelefonDekarasyoncusu
extends TelefonDekarasyoncusu {

 
public MMSliTelefonDekarasyoncusu( final Telefon telefon ) {
   
super( telefon );
 
}

 
@Override
 
public void telefonuOluştur() {
   
dekoreTelefon.telefonuOluştur();
    mmsÖzelliğiEkle
();
 
}

 
private void mmsÖzelliğiEkle() {
   
System.out.println( "MMS özelliği eklendi." );
 
}
}
/**
*
@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.decorator;

/**
* KameralıTelefonDekarasyoncusu.java
*
* Tarih bilgisi : May 23, 2014
*/
public class KameralıTelefonDekarasyoncusu
extends TelefonDekarasyoncusu {

 
public KameralıTelefonDekarasyoncusu( final Telefon telefon ) {
   
super( telefon );
 
}

 
@Override
 
public void telefonuOluştur() {
   
dekoreTelefon.telefonuOluştur();
    kameraEkle
();
 
}

 
private void kameraEkle() {
   
System.out.println( "Kamera eklendi." );
 
}
}
/**
*
@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.decorator;

/**
* Telefoncu.java
*
* Tarih bilgisi : May 23, 2014
*/
public class Telefoncu {

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

   
// Telefon nesnesi dekorasyonla oluştur.
    // BasitTelefon nesnesinden türetilen nesne,
    // dekarasyon sınıflarından geçirilerek, yeni özellikler
    // kazanması sağlanır.
   
final Telefon telefon = new KameralıTelefonDekarasyoncusu(
     
new MMSliTelefonDekarasyoncusu( new BasitTelefon() ) );

   
// Ek özellikler gelerek telefon oluşur.
   
telefon.telefonuOluştur();
 
}
}
Basit telefon oluştu.
MMS özelliği eklendi.
Kamera eklendi.

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