C#'ta Command Design Pattern

C#'ta Command Design Pattern kullanımını görelim.

Command Design Pattern: Behavioral Design Pattern gurubu içerisinde yer alır. Nesneyi tanımadığımız, nesnenin gerçekleştireceği işlem hakkında hiç bişey bilmediğimiz durumlar karşında kullanabileceğimiz bir patterndir. Talep edilen işlemin kodları sarmalanarak bir nesne haline getirilerek alıcı nesne aracılığı ile işlemin icrasını gerçekleştirebiliriz.

Gündelik hayatta cep telefonlarımızı sıkça kullanıyoruz. Telefonun elektronik yapısı ve üzerindeki tuşların altında işletilen işlemler hakkında hiç bir bilgimiz yok. Biz aramak istediğimiz numara ve arama işlemini başlatmak için komutlar göndererek istediğimiz işlemi icra ediyoruz. Arama yapmak için hangi komutlara hangi sırada basacağımızı biliyoruz. Gerisini bilmek ve işletmek telefonun işi.

 

  • Command: Komut için bir interface yada abstract class
  • Concrete Command: Command arayüzü uygulayan komut yapısı
  • Client: İstemci
  • Invoker: İşlemi çağıran yapı
  • Receiver: İşlem yapacak metot gövdeleri
namespace ConsoleApplication1

{

class Program

{

// Command

abstract class Command

{

protected Receiver receiver;


public Command(Receiver receiver)

{

this.receiver = receiver;

}


public abstract void Execute();

}


// Invoker' class class Invoker

{

private Command _command;


public void SetCommand(Command command)

{

this._command = command;

}


public void ExecuteCommand()

{

_command.Execute();

}

}


// ConcreteCommand1

class ConcreteCommand1 : Command

{

private string strParameter;

public ConcreteCommand1(Receiver receiver, string parameter)

: base(receiver)

{

this.strParameter = parameter;

}


public override void Execute()

{

receiver.Action(this.strParameter);

}

}


// ConcreteCommand2

class ConcreteCommand2 : Command

{

public ConcreteCommand2(Receiver receiver)

: base(receiver)

{

}


public override void Execute()

{

receiver.Action2();

}

}

// Receiver class Receiver

{

public void Action(string parameter)

{

Console.WriteLine("Called Receiver.Action With Parameter :

" + parameter);

}


public void Action2()

{

Console.WriteLine("Called Receiver.Action 2");

}

}


// Client

static void Main()

{

Receiver receiver = new Receiver();

Command command = new ConcreteCommand1(receiver, "ABCDEF"); Command command2 = new ConcreteCommand2(receiver);

Invoker invoker = new Invoker();


invoker.SetCommand(command); invoker.ExecuteCommand();


invoker.SetCommand(command2); invoker.ExecuteCommand();


Console.ReadKey();

}

}

}

Ekran Çıktısı:

  • Called Receiver.Action With Parameter : ABCDEF
  • Called Receiver.Action 2
Yorum Yaz

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

Yukarı Git