Programlamada Tasarım Desenleri #20 — Command Design Pattern (dotnet c#)
Programlamada Tasarım Desenleri #20 — Command Design Pattern (C# ile .NET Uygulaması)
Günümüz yazılım geliştirme dünyasında, yazılımlar her geçen gün daha da karmaşık hale gelmektedir. Bu karmaşıklığı yönetmek ve kodun bakımını kolaylaştırmak adına genellikle “Tasarım Desenleri”ne başvururuz. Bu yazımızda, davranışsal (behavioral) tasarım desenlerinden biri olan Command Design Pattern (Komut Tasarım Deseni)’ni inceleyeceğiz. Özellikle C# ve .NET çatısı altında örneklerle bu desenin nasıl uygulanabileceğini detaylı bir şekilde anlatacağız.

🔍 Command Design Pattern Nedir?
Command Design Pattern, istemci ile işlemi gerçekleştiren nesneler arasında gevşek bir bağlılık (loose coupling) oluşturmayı hedefleyen bir davranışsal tasarım desenidir. Bu desen sayesinde bir işlemi (komutu) bir nesne olarak temsil ederiz.
Bu desenin temel amacı; işlemleri soyutlamaktır. Böylece işlemleri kuyruklayabilir, sıraya koyabilir, geri alabilir (undo), ya da günlükleyebilir (log) hale getirebiliriz.
🧩 Command Pattern’in Temel Yapısı
Command Pattern genellikle şu bileşenlerden oluşur:
- ICommand (Komut Arayüzü): Tüm komutların gerçekleştirmesi gereken arayüz.
- ConcreteCommand (Somut Komut): ICommand arayüzünü implement eder ve bir işlemi temsil eder.
- Receiver (Alıcı): Gerçek işi yapan sınıftır.
- Invoker (Çağırıcı): Komutu çağırır ama onun içeriğini bilmez.
- Client (İstemci): Komutları ve alıcıları yapılandırır.
🧪 C# ile Basit Bir Command Pattern Uygulaması
Bir örnek ile anlamak her zaman daha kolaydır. Şimdi bir ışığın açılıp kapandığı bir senaryoyu düşünelim.
1. ICommand Arayüzü
public interface ICommand { void Execute(); void Undo(); }
2. Receiver (Alıcı) Sınıf
public class Light { public void TurnOn() { Console.WriteLine("Işık açıldı."); } public void TurnOff() { Console.WriteLine("Işık kapatıldı."); } }
3. ConcreteCommand Sınıfları
public class TurnOnCommand : ICommand { private Light _light; public TurnOnCommand(Light light) { _light = light; } public void Execute() { _light.TurnOn(); } public void Undo() { _light.TurnOff(); } }
public class TurnOffCommand : ICommand { private Light _light; public TurnOffCommand(Light light) { _light = light; } public void Execute() { _light.TurnOff(); } public void Undo() { _light.TurnOn(); } }
4. Invoker (Çağırıcı)
public class RemoteControl { private ICommand _command; public void SetCommand(ICommand command) { _command = command; } public void PressButton() { _command.Execute(); } public void PressUndo() { _command.Undo(); } }
5. Client (İstemci)
class Program { static void Main(string[] args) { Light livingRoomLight = new Light(); ICommand lightsOn = new TurnOnCommand(livingRoomLight); ICommand lightsOff = new TurnOffCommand(livingRoomLight); RemoteControl remote = new RemoteControl(); remote.SetCommand(lightsOn); remote.PressButton(); remote.SetCommand(lightsOff); remote.PressButton(); remote.PressUndo(); } }
✅ Konsol çıktısı:
Işık açıldı. Işık kapatıldı. Işık açıldı.
🎯 Command Pattern Ne Zaman Kullanılmalı?
Aşağıdaki durumlarda kullanımı idealdir:
- İşlemleri parametre olarak göndermek isteniyorsa.
- İşlemleri kuyruklamak, loglamak ya da zamanlamak gerekiyorsa.
- “Undo” (geri al) işlevi gerekiyorsa.
- UI butonları ve işlemleri birbirinden ayırmak isteniyorsa.
🧠 Avantajları ve Dezavantajları
✅ Avantajları:
- Gevşek bağlılık sağlar.
- Komutları kolayca yeniden kullanılabilir ve birleştirilebilir hale getirir.
- Undo/Redo işlemleri kolayca eklenebilir.
- İşlem geçmişi loglama mümkün hale gelir.
❌ Dezavantajları:
- Kod yapısı karmaşıklaşabilir.
- Her işlem için ayrı sınıf tanımlamak gerektiğinden sınıf sayısı artar.
📸 Görsel ile Kavramsal Yapı

*Kaynak: refactoring.guru/design-patterns/command*
🌐 SEO İçin Ekstra Anahtar Kelimeler
- C# Command Pattern örneği
- .NET tasarım desenleri
- Behavioral design patterns C#
- Software design pattern tutorial
- Command pattern nedir
🧭 Sonuç
Command Design Pattern, istemci ile eylemi gerçekleştiren nesne arasındaki bağımlılığı azaltarak sistemlerin esnekliğini artırır. .NET ve C# ile geliştirilen projelerde özellikle UI kontrolleri, makro ve işlemleri zamanlandırmada kullanılabilecek güçlü bir tasarım desenidir.
Kodunuzun kontrolünü komutlara bırakın, gerisini desen halletsin! 👨💻💡
📚 Ek Kaynaklar
- Refactoring Guru – Command Pattern
- Microsoft – Design patterns in .NET
- Gang of Four – Design Patterns Book
📢 Yorumlarınızı ve sorularınızı aşağıya bırakmayı unutmayın! Daha fazla tasarım deseni içeriği için bizi takip etmeye devam edin. 🔔
**#CommandPattern #TasarımDesenleri #CSharp #DotNet #SoftwareDesign #BehavioralPatterns**