Programmēšana

Kā izmantot komandu noformējuma modeli C #

Dizaina modeļi ir pārbaudīti risinājumi, ko izmanto, lai atrisinātu kopīgas dizaina problēmas un samazinātu koda sarežģītību. Četru dizaina modeļu banda iedalāma trīs kategorijās:

  • Radošie - modeļi, kas saistīti ar objekta izveidi
  • Strukturālā - modeļi, kas saistīti ar objektu montāžu
  • Uzvedība - modeļi, kas saistīti ar objektu sadarbību un pienākumu nodalīšanu

Komandu noformējuma modelis ietilpst uzvedības modeļu kategorijā. Šajā rakstā ir izpētīts, kā mēs varam strādāt ar komandu noformējuma modeli C #.

Kāds ir komandas noformējuma modelis?

Komandas noformējuma modeļa mērķis ir atsaistīt darbības pieprasītāju no objekta, kas izpilda darbību. Komandu noformējuma modelī pieprasījums tiek iekapsulēts kā objekts, kas satur visu informāciju par pieprasījumu. Pēc tam šis objekts tiek nodots izsaucēja objektam. Pēc tam izsaucēja objekts meklē piemērotu objektu, lai apstrādātu komandu, un nodod komandu objektam.

Komandu noformējuma modelis ir laba izvēle, ja vēlaties savā lietojumprogrammā ieviest atzvanīšanu, rindas uzdevumus, izsekošanas vēsturi un atsaukt / pārtaisīt funkcionalitāti. Komandu shēma ir laba izvēle atkārtotu mēģinājumu ieviešanai - kad jūsu lietojumprogramma vēlas vēlāk mēģināt izveidot savienojumu ar pakalpojumu vēlāk, kas pašlaik nedarbojas un nedarbojas. Komandu modelis tiek izmantots arī ziņojumu rindošanas lietojumprogrammās, t.i., lietojumprogrammās, kurām jāatgūst pēc datu zuduma.

Komandu noformējuma parauga dalībnieki

Klasiskajā komandu modeļa ieviešanā jums ir četras sastāvdaļas: komanda, izsaucējs, uztvērējs un klients. Komandu noformējuma modeļa dalībnieki ietver:

  • Komanda - nodrošina saskarni operācijas izpildei
  • ConcreteCommand - paplašina komandu saskarni un ievieš Execute metodi
  • Klients - ieceļ ConcreteCommand klasi
  • Uzaicinātājs - informē komandu izpildīt pieprasījumu
  • Saņēmējs - satur ar pieprasījumu saistīto darbību izpildes loģiku

Komandu noformējuma modeļa piemērs C #

Nākamajā sadaļā mēs izpētīsim, kā mēs varam ieviest komandu noformējuma modeli. Šajā piemērā mēs ieviesīsim vienkāršu kalkulatoru, izmantojot šādas klases:

  • Komanda (komandas abstraktā bāzes klase)
  • SimpleCalculator (Uztvērēja klase)
  • AddCommand (konkrēta komandu klase)
  • SubtractCommand (konkrēta komandu klase)
  • Reizināt komandu (konkrēta komandu klase)
  • DivideCommand (konkrēta komandu klase)
  • Uzaicinātājs (Uzaicinātāja klase)

Izveidojiet komandas abstrakto bāzes klasi komandā C #

Apsveriet šādu abstraktu bāzes klasi ar nosaukumu Command, kas satur Execute metodes deklarāciju.

sabiedrības abstraktās klases pavēlniecība

    {

aizsargāts SimpleCalculator uztvērējs;

publiskā komanda (SimpleCalculator uztvērējs)

        {

this.receiver = uztvērējs;

        }

public abstract int Izpildīt ();

    }

Šis uzskaitījums parāda darbības, kuras tiks atbalstītas mūsu vienkāršajā kalkulatorā.

public enum CommandOption

    {

Saskaitīt, atņemt, reizināt, dalīt

    }

Izveidojiet uztvērēja klasi C #

Tālāk ir klase ar nosaukumu SimpleCalculator. Šī klase darbojas kā uztvērējs un satur metožu saskaitīšanas, atņemšanas, reizināšanas un dalīšanas definīciju.

publiskā klase SimpleCalculator

    {

privāts int _x, _y;

publiskais SimpleCalculator (int a, int b)

        {

_x = a;

_y = b;

        }

public int Pievienot ()

        {

atgriezties _x + _y;

        }

public int Atņemt ()

        {

atgriezties _x - _y;

        }

public int Reizināt ()

        {

atgriezties _x * _y;

        }

public int Divide ()

        {

atgriezties _x / _y;

        }

    }

Izveidojiet konkrētas komandu klases C #

Konkrētās komandu klases paplašina Command abstraktās bāzes klasi un ievieš Execute metodi, kā parādīts zemāk.

 public class AddCommand: Komanda

    {

privāts SimpleCalculator _calculator;

public AddCommand (SimpleCalculator calculator): bāze (kalkulators)

        {

_kalkulators = kalkulators;

        }

public override int Izpildīt ()

        {

atgriezties _kalkulators.Pievienot ();

        }

    }

public class SubtractCommand: Komanda

    {

privāts SimpleCalculator _calculator;

publiskais SubtractCommand (SimpleCalculator kalkulators):

bāze (kalkulators)

        {

_kalkulators = kalkulators;

        }

public override int Izpildīt ()

        {

atgriezties _kalkulators. Atņemt ();

        }

    }

publiskā klase MultiplyCommand: Command

    {

privāts SimpleCalculator _calculator;

publiskais MultiplyCommand (SimpleCalculator kalkulators):

bāze (kalkulators)

        {

_kalkulators = kalkulators;

        }

public override int Izpildīt ()

        {

atgriezties _kalkulators. Reizināt ();

        }

    }

publiskā klase DivideCommand: Command

    {

privāts SimpleCalculator _calculator;

publiskais DivideCommand (SimpleCalculator kalkulators):

bāze (kalkulators)

        {

_kalkulators = kalkulators;

        }

public override int Izpildīt ()

        {

atgriezties _kalkulators.Sadalīt ();

        }

    }

Izveidojiet numuru Invoker C #

Šis koda fragments ilustrē Invoker klasi. Tas satur divas metodes, SetCommand un Execute. Kamēr SetCommand tiek izmantots, lai komandas objektam piešķirtu privāto komandu atsauci klasē Invoker, komandu Execute izmanto komandas izpildei.

 sabiedrības klases aicinātājs

    {

privātā komanda _komanda;

public void SetCommand (komandu komanda)

        {

_komanda = komanda;

        }

public int Izpildīt ()

        {

return _command.Execute ();

        }

    }

Komandas dizaina modelis darbībā C #

Visbeidzot, šāds koda fragments parāda, kā jūs varat veikt vienkāršu aprēķinu, izmantojot klasi SimpleCalculator.

static void Main (virkne [] args)

        {

SimpleCalculator calculator = jauns SimpleCalculator (15, 3);

var addCommand = new AddCommand (kalkulators);

var subtractCommand = jauns SubtractCommand (kalkulators);

var multiplyCommand = jauns MultiplyCommand (kalkulators);

var divideCommand = jauns DivideCommand (kalkulators);

Uzaicinātājs = jauns aicinātājs ();

invoker.SetCommand (addCommand);

Console.WriteLine ("Rezultāts ir {0}", invoker.Execute ());

invoker.SetCommand (subtractCommand);

Console.WriteLine ("Rezultāts ir {0}", invoker.Execute ());

invoker.SetCommand (multiplyCommand);

Console.WriteLine ("Rezultāts ir {0}", invoker.Execute ());

invoker.SetCommand (divideCommand);

Console.WriteLine ("Rezultāts ir {0}", invoker.Execute ());

Console.ReadLine ();

        }

Komandu noformējums nodrošina paplašināmību un samazina saikni, kas pastāv starp komandas izsaucēju un uztvērēju. Tā kā pieprasījums ir iekapsulēts atsevišķā objektā, jūs varat parametrizēt metodes ar dažādiem pieprasījumiem, saglabāt pieprasījumus rindā un pat nodrošināt atbalstu atkārtotām vai atsaucamām darbībām.

Dariet vairāk ar C #:

  • Kā strādāt ar AutoMapper C #
  • Kad izmantot abstraktu klasi un saskarni C #
  • Kā strādāt ar diegiem C #
  • Kā lietot Dapper ORM C #
  • Kā ieviest krātuves dizaina modeli C #
  • Kā ieviest vienkāršu reģistrētāju C #
  • Kā strādāt ar delegātiem C #
  • Kā strādāt ar Action, Func un Predicate delegātiem C #
  • Kā strādāt ar log4net C #
  • Kā strādāt ar refleksiju C #
$config[zx-auto] not found$config[zx-overlay] not found