Dekorasyon

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 :

Ö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.

Örnek Sınıf Çizelgesi :

Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )

Telefon.java :

public interface Telefon {

void telefonuOluştur();

}

BasitTelefon.java :

public class BasitTelefon implements Telefon {


@Override

public void telefonuOluştur() {

System.out.println( "Basit telefon oluştu." );

}

}

TelefonDekarasyoncusu.java :

public abstract class TelefonDekarasyoncusu implements Telefon {

protected Telefon dekoreTelefon;


public TelefonDekarasyoncusu( Telefon telefon ) {

dekoreTelefon = telefon;

}

}

KameralıTelefonDekarasyoncusu.java :

public class KameralıTelefonDekarasyoncusu

extends TelefonDekarasyoncusu {


public KameralıTelefonDekarasyoncusu( Telefon telefon ) {

super(telefon);

}


@Override

public void telefonuOluştur() {

kameraEkle();

dekoreTelefon.telefonuOluştur();

}


private void kameraEkle() {

System.out.println( "Kamera eklendi." );

}

}

MMSliTelefonDekarasyoncusu.java :

public class MMSliTelefonDekarasyoncusu

extends TelefonDekarasyoncusu {


public MMSliTelefonDekarasyoncusu( Telefon telefon ) {

super(telefon);

}


@Override

public void telefonuOluştur() {

mmsÖzelliğiEkle();

dekoreTelefon.telefonuOluştur();

}


private void mmsÖzelliğiEkle() {

System.out.println( "MMS özelliği eklendi." );

}

}

Telefoncu.java :

public class Telefoncu {


public static void main(String[] args) {

// Telefon nesnesi dekorasyonla oluştur.

Telefon telefon = new KameralıTelefonDekarasyoncusu (

new MMSliTelefonDekarasyoncusu( new BasitTelefon() ) );


telefon.telefonuOluştur();

}

}