TASARIM ÖRÜNTÜLERİ
Command
Behavioral Patterns bir örneği olan Command örüntü istemcinin hedef nesne üzerinde yaptığı işlemleri bir komut objesi haline gelip işleterek bu komutların saklanması(macro), komutların geri alınması gibi uygulamanıza esneklikler kazandırır.
Bilgi Notu: Diğer tüm Tasarım Örüntüleri yazıma bu linkten ulaşabilirsiniz.
Hangi Durumlarda
Command örüntüsü denilince UI Uygulamaları aklıma geliyor. Örneğin Word, Photoshop, Maya. Çünkü tüm bu araçlarda yaptığınız işleri geri alma (Undo) veya yaptığınız işleri gruplayarak tekrar çalıştırma (Macro) ihtiyacı vardır. Bu tarz bir şey yapabilmek
Aynı şekilde elimizdeki bu komutları bir kuyruğa yazıp işletebilir, işletme sırasında durdurup , devam ettirebiliriz. Bu sayede remote çağrılarıda gerçekleştirebiliriz.
Yapısı
Invoker: Çalıştıracağı Command arayüzünden komutları execute eder.
Command:içerisinde execute vb komut olan arayüz (interface)
Command1, Command2 .. : Receiver üzerinde işlem yapabilecek istemci için anlamlı komutlardır.
Receiver: Servis sağlayan asıl sınıftır.
Kod Örneği
Bu örüntüyü basit bir Word örneği ile anlatalım.(http://bit.ly/1OrBAuC ) Document: TextBox içerisindeki metni değiştirerek Bold, Italic, Underline haline getiriyor.
Command yapımızı tanımlıyoruz. Command örüntüsü için en önemli konu execute() fonksiyonu, yani işlemi gerçekleştirildiği fonksiyon. Birde bu işlemi geriye alabilmek için undo() fonksiyonunu tanımlıyoruz.
Birçok UndoableCommand sınıfımız olabilir.
- BoldCommand,
- ItalicCommand,
- UnderscoreCommand,
- CopyCommand gibi.
Bu Command sınıfı dokümanın değiştirilmeden önceki state tutuyorki undo() işlemi sonrasında yaptığı işlemi geri alabilsin. execute() fonksiyonunda Dokuman nesnesi üzerinden ilgili değişikliği gerçekleştiriyor.
Command Manager sınıfı çalıştırılmak istenen komutları Stack veriyapısında tutuyorki , undo işlemi sırasında en son yapılandan eskiye doğru yapılan işlemleri geriye alabilsin.
Burada ana uygulama kullanıcının davranışlarını Command olarak CommandManager iletmesi ve işletilmesinin sağlanması.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.