C#'ta Mediator Design Pattern

C#'ta Mediator Design Pattern Kullanımı

Mediator Design Pattern nesnelerin aralarındaki iletişimin tek bir noktadan sağlanması ve koordine edilmesi gerektiği durumlarda kullanılır.

Nesneler birbirleri ile doğrudan konuşmak yerine merkezi bir yapı aracılığı ile haberleşirler bu sayede nesneler arasında bağımlılık azalır. Nesneler birbirlerinin kim olduklarını bilmeden merkez aracılığı ile haberleşebilirler.

Pattern kullanım örneğinde dofactory üzerindeki bir chat uygulamasını konumuz ile ilişkilendirmeye çalışacağız.

Örneğimizde farklı guruplar içinde yer alan kullanıcılar birbirleri ile merkez aracılığı ile konuşmaktadır

namespace ConsoleApplication1

{


//Mediator

abstract class Mediator

{

public abstract void KayitOl(Katilimci katilimci);

public abstract void MesajGonder(string kimden, string kime, string mesaj);

}


//ConcreteMediator

class ConcreteMediator : Mediator

{

private Dictionary<string, Katilimci>_katilimcilar = new Dictionary<string, Katilimci>();


public override void KayitOl(Katilimci katilimci)

{

if (!_katilimcilar.ContainsValue(katilimci))

{

_katilimcilar[katilimci.Ad] = katilimci;

}

katilimci.concreteMediator = this;

}


public override void MesajGonder(string kimden, string kime, string mesaj)

{

Katilimci katilimci = _katilimcilar[kime]; if (katilimci != null)

{

katilimci.MesajAlici(kimden, mesaj);

}

}

}


// Colleague class Katilimci

{

private ConcreteMediator _concreteMediator; private string _ad;


public Katilimci(string ad)

{

this._ad = ad;

}


public string Ad

{

get { return _ad; }

}


public ConcreteMediator concreteMediator

{

set { _concreteMediator = value; } get { return _concreteMediator; }

}


public void MesajGonder(string kime, string mesaj)

{

_concreteMediator.MesajGonder(_ad, kime, mesaj);

}


public virtual void MesajAlici(string kimden, string mesaj)

{

Console.WriteLine("{0} to {1}: '{2}'", kimden, Ad, mesaj);

}

}



//ConcreteColleague

class ConcreteColleague1 : Katilimci

{

public ConcreteColleague1(string ad)

: base(ad)

{

}


public override void MesajAlici(string kimden, string mesaj)

{

Console.Write("Kime -> ConcreteColleague1: "); base.MesajAlici(kimden, mesaj);

}

}


//ConcreteColleague

class ConcreteColleague2 : Katilimci

{

public ConcreteColleague2(string ad)

: base(ad)

{

}

public override void MesajAlici(string kimden, string mesaj)

{

Console.Write("Kime -> ConcreteColleague2: "); base.MesajAlici(kimden, mesaj);

}

}



//Client class Program

{

static void Main(string[] args)

{

ConcreteMediator sohbetOdasi = new ConcreteMediator();


Katilimci Can = new ConcreteColleague1("Can"); Katilimci Canan = new ConcreteColleague1("Canan"); Katilimci Baris = new ConcreteColleague2("Barış"); Katilimci Ahmet = new ConcreteColleague2("Ahmet"); Katilimci Selvi = new ConcreteColleague1("Selvi");



sohbetOdasi.KayitOl(Can); sohbetOdasi.KayitOl(Canan); sohbetOdasi.KayitOl(Baris); sohbetOdasi.KayitOl(Ahmet); sohbetOdasi.KayitOl(Selvi);


// Chatting participants Selvi.MesajGonder("Can", "Selam Can");

Canan.MesajGonder("Can", "Selam Can Yemeğe Çıkacakmısın ?"); Baris.MesajGonder("Ahmet", "İstediğim evraklar hazır mı ?"); Canan.MesajGonder("Ahmet", "Toplantı saat 3'te "); Ahmet.MesajGonder("Barış", "İstediğin evraklar hazır");



Console.Read();

}

}

}

Ekran Çıktısı

  • Kime -> ConcreteColleague1: Selvi to Can: 'Selam Can'
  • Kime -> ConcreteColleague1: Canan to Can: 'Selam Can Yemeğe Çıkacakmısın ?' Kime -> ConcreteColleague2: Barış to Ahmet: 'İstediğim evraklar hazır mı ?'
  • Kime -> ConcreteColleague2: Canan to Ahmet: 'Toplantı saat 3'te ' Kime -> ConcreteColleague2: Ahmet to Barış: 'İstediğin evraklar hazır'

ConcreteColleague farklı gurupları network'leri temsil etmektedir bu guruplar içlerinde kullanıcıları barındırmaktadır.

Ozan Dalbudak
Merhaba,1995 doğumluyum. 2009 yılında lisede veritabanı Programcılığı bölümünü kazanarak kariyerime başlamış oldum. Daha sonra Selçuk Üniversitesi'nde Bilgisayar Mühendisliği okuyorum.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git