Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Composite Tasarım Deseni - Composite Design Pattern | Facade Tasarım Deseni - Facade Design Pattern>>

Decorator Tasarım Deseni - Decorator Design Pattern

Yazar harunozer 09 December 2012

Decorator Tasarım Deseni - Decorator Design Pattern Decorator tasarım deseni; structural grubuna ait bir yapıya dinamik olarak yeni metotlar eklenmesini düzenleyen bir tasarım desenidir. Dofactory.com a göre kullanım sıklığı %60 civarındadır.

Decoractor tasarım deseni; yapıya yeni metot eklenmesini yapının arayüzünü uygulayan bir decorator nesnesi tanımlanarak yapar. İçinde uyguladığı arayüz tipinde bir referans barındırır ve kendisine verilen bu nesne üzerinde yeni eklenecek olan metotları barındırır. Kullanımı oldukça basittir. Uml diyagramını inceleyerek daha iyi anlayabiliriz.

decorator design pattern uml

Component dinamik olarak operasyonlar eklenebilecek yapının uygulayacağı arayüz veya abstract nesnedir. ConcreteComponent ise bu yapıyı uygulayan, operasyon eklenecek gerçek nesnelerdir. Decorator nesnesi Component nesnesini uygular ve içinde Component tipinden bir referans barındırır. ConcreteDecorator nesneleri ekleyeceğimiz operasyonların olacağı nesnelerdir ve Decorator arayüzünü uygular.

Şimdi decorator tasarım deseni ile ilgili örnek bir uygulama yapalım. Uygulamamız da üye ekle, düzenle işlemlerimiz olsun ve bu yapıya mesaj gönderme işlemini ekleyelim. Uygulamamızın class diyagramı aşağıdadır.

Uygulamamızın kodları aşağıdadır.

//kod uzamaması için Üye nesnesi oluşturmuyoruz.
//Component
interface IUyeOperation
{
    void Ekle();
    void Sil();
}
//ConcreteComponent
class UyeOperation : IUyeOperation
{
    public void Ekle()
    {
        Console.WriteLine("üye eklendi.");
    }
    public void Sil()
    {
        Console.WriteLine("üye silindi.");
    }
}
//Decorator
abstract class UyeOperationDecorator : IUyeOperation
{
    IUyeOperation uOperation;
    public UyeOperationDecorator(IUyeOperation uOperation)
    {
        this.uOperation = uOperation;
    }
    public void Ekle()
    {
        uOperation.Ekle();
    }
    public void Sil()
    {
        uOperation.Sil();
    }
}
//ConcreteDecorator
class UyeMesajOperation : UyeOperationDecorator
{
    public UyeMesajOperation(IUyeOperation uOperation)
        : base(uOperation)
    {
    }
    public void MesajGonder(string mesaj)
    {
        Console.WriteLine("{0} mesajı gönderildi.", mesaj);
    }
}
class Program
{
    static void Main(string[] args)
    {
        //decorator uygulanacak component nesnesi
        UyeOperation oUye = new UyeOperation();
        //mesaj decorator nesnesine component i veriyoruz
        UyeMesajOperation dUye = new UyeMesajOperation(oUye);
        //decorator üzerinden component yeni metotlara sahip oluyor.
        dUye.Ekle();
        dUye.MesajGonder("decorator mesaj");
        Console.ReadKey();
    }
}

Uygulamamızda ki IUyeOperation arayüzü Component yapısına karşılık gelmektedir. Decorator uygulanacak olan nesnelerin metotları burada tanımlanır ve oluşturduğumuz UyeOperationDecorator abstract sınıfının barındıracağı referansın tipini belirtir. UyeOperationDecorator abstract sınıfı ise IUyeOperation arayüzünden türeyerek içinde barındırdığı uOperation da ki metotları çalıştırır. UyeMesajOperation sınıfı ise UyeOperationDecorator sınıfını uygular ve UyeOperation sınıfının sahip olacağı metotları barındırır. Client yapısına denk gelen Main metodunda ilk olarak UyeOperation nesnesi oluşturulur. Daha sonra decorator yapısı olan UyeMesajOperation oluşturulup parametre olarak verilir. Oluşturduğumuz UyeMesajOperation sınıfı ile UyeOperation sınıfı üzerinde işlem yapıyoruz.

Uygulamayı aşağıdaki linkten indirebilirsiniz.

DecoratorSample.rar

Tam Sayfa
Tags tasarım desenleri,
Kategoriler c#.net, Tasarım Desenleri
İşlemler
Bu Makale 3  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri