Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  İş mantığını komutlar şeklinde tasarlayarak bu komutları bir nesne üzerinde çalıştırmak, nesnede oluşan değişiklikleri geri alabilmek veya tekrar nesneye geri kazandırabilmek için kullanılan tasarım şablonu.

Bunun için projenizdeki işleri komut (Command) sınıfları şeklinde planlarsınız. Bu sınıfların hepsini Execute(), Undo(), Redo() gibi soyut metodları olan bir soyut temel sınıftan türetirsiniz. Ya da interface yapın, size kalmış. Sonra komutları bir bir çalıştırır, çalıştırılan komutları stack benzeri bir veri yapısında saklar, pop eder, push edersiniz.

Örneğin iki-üç arkadaş biraraya gelip, geyikle başlayan bir beyin fırtınasının ardından fena halde gazı aldığımız bir günde fotoşop benzeri bir uygulama yazmaya karar verdiğimizi düşünelim. "Ulan yaparız ki nolcak? İki resize bi blur al sana fotoşop" şeklinde konuşan bir arkadaşımız heyecanını gizleyemezken, ümitsiz bir arkadaşımız "Ya olm, resim üzerinde bi sürü işlem yapıcan sonra o işlemleri geri alabilmen lazım, tekrar uygulayabilmen lazım, zor olm bu işler!" şeklinde ümitsizlik aşılar heyecanla gerilmiş ekibimize. Biraz pattern mürekkebi yalamış bir arkadaşımız hemen atlar "O iş kolay be olm ya, command pattern diye bişi var!" Sonra şöyle bişeyler yazarlar:

// soyut temel sınıf
public abstract class Command
{
   public Arguments Arguments;

   public abstract bool Execute();
   public abstract bool Undo();
   public abstract bool Redo();
}
// bu sınıf Resize işini yapsın
public class CommandResize : Command
{
   public override bool Execute(){ /* implementation */ }
   public override bool Undo(){ /* implementation */ }
   public override bool Redo(){ /* implementation */ }
}
// bu da resme gözlerinizi kısarak bakıyomuşsunuz izlenimi veren filtreyi uygulasın
public class CommandFilterBlur : Command
{
   public override bool Execute(){ /* implementation */ }
   public override bool Undo(){ /* implementation */ }
   public override bool Redo(){ /* implementation */ }
}
// ... diğer komutlar
// ... diğer komutlar

// gelelim asıl sınıfa
public class Fotosop
{
   public Image Resim; // üzerinde çalışılan resim.
   private Stack stack;

   // resim üzerinde bir komut çalıştırıryoruz
   public bool ExecuteCommand(Command command)
   {
      command.Arguments.Image = Resim;
      if(command.Execute())
         stack.Push(command);
   }

   // son uyguladığımız komutu geri alıyoruz.
   public bool UndoCommand()
   {
      Command cmd = stack.Pop(command);
      if(!cmd.Undo())
      {
         stack.Push(cmd);
         MessageBox.Bik("geri alınmadı");
      }
   }
}


Bu kadar etmez tabi. Programımza menüler, toolbar butonları neyin ekleyip, bunlara tıklandığında
fotosop.ExecuteCommand(cmd);
komutunu vermemiz gerekir.
fizikci
11 Mart 2006 18:06 ~ 12 Mart 2006 14:27
2.  Command sınıfına IsExecutable adında abstract property veya canBeExecuted() gibi bir abstract method eklemek suretiyle çalışır durumda olup olmadıklarını belirtebilirsiniz. Ayrıca bkz: Idle
fizikci
16 Nisan 2006 00:05
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
» Common Attribute Registry Pattern » Prototype Pattern » Chain of responsibility pattern » Builder Pattern » Abstract Factory Pattern » Iterator pattern » Microsoft » Singleton Pattern » Strategy pattern » Virtual Proxy Pattern » Adapter Pattern » Read-Write Lock Pattern » Critical Section Pattern » Object Authenticator Pattern » Memento pattern » Bridge Pattern » Flyweight Pattern » Visitor pattern » Consistent Lock Order Pattern » Façade Pattern » Mediator pattern » Aggregate Enforcer Pattern » Null Object Pattern » Template Method pattern » Interpreter pattern » Factory Method Pattern » Composite Pattern » disable » State pattern » Decorator Pattern » Guarded Suspension Pattern » pattern » Proxy Pattern » Explicit Object Release Pattern » Observer pattern » Counting Proxy Pattern » Object Cache Pattern

© 2005, Bilişim Kulübü. (1093 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen