Problem
-Yukarıda ki örnekte Invoker sınıfı receiver.DoAction() requesti doğrudan uygulanıyor.
-Bu durum run-time da bir request belirtmeyi imkansız hale getirir.
-Reusable object tasarlarken, belirli requestler compile-time da bilinmez ve run-time da belirtilmelidir.
-Bu durum run-time da bir request belirtmeyi imkansız hale getirir.
-Reusable object tasarlarken, belirli requestler compile-time da bilinmez ve run-time da belirtilmelidir.
Çözüm
-Invoker ve Receiver sınıfları arasındaki bağımlılığı azaltmak ve requesti nesne olarak ifade etmek istediğimiz de command paterne başvurabiliriz.
-Command nesneleri, isteği metot olarak soyutlamak yerine daha yetkin bir şekilde sınıf olarak soyutlayan nesnelerdir.
Ne zaman kullanılır ?
-receiver.DoAction() metodu çağırıldığı anda işlevi yerine getirir. Bazen işlevi hemen yürütmek istemeyebiliriz. Bir kuyruğa yazılarak ayrı olarak yapılmasını istediğimiz işlerde command patterni kullanabiliriz.
- Command nesneleri bir kuyruğa yazılabilir ve muhtemelen farklı bilgisayarlarda çalışan birden çok invoker nesnesi tarafından handle edilebilir.
-Command Pattern, Command objelerini bir queue da saklamamıza izin verir. Bu şekilde redo ve undo işlemlerini uygulayabiliriz.
örnek
Bir banka uygulaması yazıyoruz ve burada deposit, witdraw ve transfer işlemleri yapılabiliyor olacak.
Bu metotlar çağırıldıkları anda bakiyeyi değiştiren para yatırma ve para çekme işlevlerine sahiptirler.
Bazen işlevleri hemen yürütmek istemeyebiliriz.
Bir kuyruğa yazılarak ayrı olarak yapılmasını istediğimiz işlerde Command Patterni kullanabiliriz.
Command Nesneleri bir kuruğa eklenebilir ve muhtemelen farklı bilgisayarlarda çalışan birden çok Invoker nesnesi tarafından handle edilebilir.
Bu programı daha scalable hale getirmenin bir yoludur.
Bir banka uygulaması yazıyoruz ve burada deposit, witdraw ve transfer işlemleri yapılabiliyor olacak.
Bu metotlar çağırıldıkları anda bakiyeyi değiştiren para yatırma ve para çekme işlevlerine sahiptirler.
Bazen işlevleri hemen yürütmek istemeyebiliriz.
Bir kuyruğa yazılarak ayrı olarak yapılmasını istediğimiz işlerde Command Patterni kullanabiliriz.
Command Nesneleri bir kuruğa eklenebilir ve muhtemelen farklı bilgisayarlarda çalışan birden çok Invoker nesnesi tarafından handle edilebilir.
Bu programı daha scalable hale getirmenin bir yoludur.
Burada deposit ve witdraw metodları Account sınıfın içerisine eklenmiştir.
Hiç yorum yok:
Yorum Gönder