C # 'da komut tasarım desenini kullanma

Tasarım kalıpları, yaygın tasarım sorunlarını çözmek ve koddaki karmaşıklıkları azaltmak için kullanılan kanıtlanmış çözümlerdir. Dörtlü Çete tasarım modeli üç kategoriye ayrılır:

  • Yaratım - nesne oluşturma ile ilgili kalıplar
  • Yapısal - nesne montajıyla ilgili modeller
  • Davranışsal - nesne işbirliği ve sorumlulukların ayrılması ile ilgili modeller

Komut tasarım modeli, davranışsal model kategorisine girer. Bu makale, C # 'da komut tasarım modeliyle nasıl çalışabileceğimizi araştırıyor.

Komut tasarım modeli nedir?

Komut tasarım modelinin amacı, bir eylemi talep eden kişiyi eylemi yürüten nesneden ayırmaktır. Komut tasarım modelinde, bir istek, istekle ilgili tüm bilgileri içeren bir nesne olarak kapsüllenir. Bu nesne daha sonra bir çağıran nesneye aktarılır. Ardından çağıran nesne, komutu işlemek için uygun nesneyi arar ve komutu nesneye iletir.

Uygulamanızda geri aramaları, kuyruk görevlerini, izleme geçmişini ve geri alma / yineleme işlevlerini uygulamak istediğinizde komut tasarım deseni iyi bir seçimdir. Komut kalıbı, yeniden deneme mekanizmalarını uygulamak için iyi bir seçimdir - uygulamanız, şu anda çalışmayan ve daha sonraki bir noktada bir hizmete bağlanmayı yeniden denemek istediğinde. Komut kalıbı ayrıca mesaj kuyruğu uygulamalarında, yani veri kaybından kurtarılması gereken uygulamalarda da kullanılır.

Komut tasarım modeli katılımcıları

Komut modelinin klasik bir uygulamasında dört bileşene sahipsiniz: komut, çağıran, alıcı ve istemci. Komut tasarım modelindeki katılımcılar şunları içerir:

  • Komut - bir işlemi yürütmek için bir arayüz sağlar
  • ConcreteCommand - Command arayüzünü genişletir ve Execute yöntemini uygular
  • İstemci - bir ConcreteCommand sınıfını başlatır
  • Invoker - komutu yerine getirmesi için bilgilendirir
  • Alıcı - istekle ilişkili işlemleri yürütme mantığını içerir

C # 'da komut tasarım deseni örneği

Sonraki bölümde komut tasarım modelini nasıl uygulayabileceğimizi keşfedeceğiz. Örneğimizde, aşağıdaki sınıfları kullanarak basit bir hesap makinesi uygulayacağız:

  • Komut (Komut soyut temel sınıfı)
  • SimpleCalculator (Alıcı sınıfı)
  • AddCommand (somut komut sınıfı)
  • SubstractCommand (somut komut sınıfı)
  • Multiply Command (somut komut sınıfı)
  • DivideCommand (somut komut sınıfı)
  • Invoker (Invoker sınıfı)

C # 'da Command soyut temel sınıfını oluşturun

Execute yönteminin bildirimini içeren Command adlı aşağıdaki soyut temel sınıfı göz önünde bulundurun.

public abstract class Komut

    {

        korumalı SimpleCalculator alıcı;

        public Command (SimpleCalculator alıcı)

        {

            this.receiver = alıcı;

        }

        public abstract int Execute ();

    }

Aşağıdaki numaralandırma, basit hesap makinemizde desteklenecek işlemleri gösterir.

genel numaralandırma CommandOption

    {

        Topla, Çıkar, Çarp, Böl

    }

C # 'da Receiver sınıfını oluşturun

Aşağıdaki, SimpleCalculator adlı bir sınıftır. Bu sınıf, Alıcı görevi görür ve Add, Extract, Multiply ve Divide yöntemlerinin tanımını içerir.

public class SimpleCalculator

    {

        özel int _x, _y;

        public SimpleCalculator (int a, int b)

        {

            _x = a;

            _y = b;

        }

        public int Ekle ()

        {

            dönüş _x + _y;

        }

        public int Subtract ()

        {

            dönüş _x - _y;

        }

        public int Multiply ()

        {

            dönüş _x * _y;

        }

        public int Divide ()

        {

            dönüş _x / _y;

        }

    }

C # 'da somut komut sınıfları oluşturun

Somut komut sınıfları, Command soyut temel sınıfını genişletir ve aşağıda gösterildiği gibi Execute yöntemini uygular.

 public class AddCommand: Command

    {

        özel SimpleCalculator _calculator;

        genel AddCommand (SimpleCalculator hesap makinesi): temel (hesap makinesi)

        {

            _calculator = hesap makinesi;

        }

        public override int Execute ()

        {

            return _calculator.Add ();

        }

    }

    public class SubtractCommand: Command

    {

        özel SimpleCalculator _calculator;

        public SubtractCommand (SimpleCalculator hesap makinesi):

        baz (hesap makinesi)

        {

            _calculator = hesap makinesi;

        }

        public override int Execute ()

        {

            return _calculator.Subtract ();

        }

    }

    public class MultiplyCommand: Command

    {

        özel SimpleCalculator _calculator;

        public MultiplyCommand (SimpleCalculator hesap makinesi):

        baz (hesap makinesi)

        {

            _calculator = hesap makinesi;

        }

        public override int Execute ()

        {

            return _calculator.Multiply ();

        }

    }

    public class DivideCommand: Command

    {

        özel SimpleCalculator _calculator;

        genel DivideCommand (SimpleCalculator hesap makinesi):

        baz (hesap makinesi)

        {

            _calculator = hesap makinesi;

        }

        public override int Execute ()

        {

            return _calculator.Divide ();

        }

    }

C # 'da Invoker sınıfını oluşturun

Aşağıdaki kod parçacığı, Invoker sınıfını gösterir. SetCommand ve Execute olmak üzere iki yöntem içerir. SetCommand, komut nesnesini Invoker sınıfındaki özel Komut referansına atamak için kullanılırken, komutu yürütmek için Yürütme kullanılır.

    public class Invoker

    {

        private Command _command;

        public void SetCommand (Komut komutu)

        {

            _command = komut;

        }

        public int Execute ()

        {

            return _command.Execute ();

        }

    }

C # uygulamasında komut tasarım deseni eylemde

Son olarak, aşağıdaki kod parçacığı SimpleCalculator sınıfını kullanarak nasıl basit bir hesaplama yapabileceğinizi göstermektedir.

statik geçersiz Ana (dize [] değiştirgeler)

        {

            SimpleCalculator hesap makinesi = yeni SimpleCalculator (15, 3);

            var addCommand = new AddCommand (hesap makinesi);

            var substractCommand = new SubtractCommand (hesap makinesi);

            var multiplyCommand = new MultiplyCommand (hesap makinesi);

            var divideCommand = new DivideCommand (hesap makinesi);

            Invoker invoker = new Invoker ();

            invoker.SetCommand (addCommand);

            Console.WriteLine ("Sonuç: {0}", invoker.Execute ());

            invoker.SetCommand (substractCommand);

            Console.WriteLine ("Sonuç: {0}", invoker.Execute ());

            invoker.SetCommand (multiplyCommand);

            Console.WriteLine ("Sonuç: {0}", invoker.Execute ());

            invoker.SetCommand (divideCommand);

            Console.WriteLine ("Sonuç: {0}", invoker.Execute ());

            Console.ReadLine ();

        }

Komut tasarım modeli, genişletilebilirlik için destek sağlar ve bir komutun çağıran ve alıcısı arasında var olan eşleşmeyi azaltır. İstek bağımsız bir nesnede kapsüllendiğinden, yöntemleri farklı isteklerle parametrelendirebilir, istekleri bir kuyruğa kaydedebilir ve hatta yeniden yapılabilen veya geri alınabilen işlemler için destek sağlayabilirsiniz.

-

C # ile daha fazlasını yapın:

  • C # 'da AutoMapper ile nasıl çalışılır
  • C # 'da soyut bir sınıf ve arabirim ne zaman kullanılır?
  • C # 'da iş parçacıklarıyla nasıl çalışılır
  • C # 'da Dapper ORM nasıl kullanılır
  • Depo tasarım modeli C # 'da nasıl uygulanır?
  • C # 'da basit bir kaydedici nasıl uygulanır
  • C # 'da temsilcilerle nasıl çalışılır
  • C # 'ta Action, Func ve Predicate temsilcileriyle nasıl çalışılır?
  • C # 'da log4net ile nasıl çalışılır
  • C # 'da yansıma ile nasıl çalışılır