程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#敕令形式(Command Pattern)實例教程

C#敕令形式(Command Pattern)實例教程

編輯:C#入門知識

C#敕令形式(Command Pattern)實例教程。本站提示廣大學習愛好者:(C#敕令形式(Command Pattern)實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#敕令形式(Command Pattern)實例教程正文


本文以實例情勢講述了C#敕令形式的完成辦法,分享給年夜家供年夜家參考。詳細完成辦法以下:

現假定想讓遙控器掌握電燈的開關、電視機的開關和切換,該若何做?

一切的開、關、切換都是遙控器收回的指令,把這些指令同一籠統成一個接口。

public interface IControl
{
    void Execute();
}

把電燈、電視機籠統成類。

public class Tv
{
    public void TurnOn()
    {
      Console.WriteLine("電視機翻開了");
    }
    public void TurnOff()
    {
      Console.WriteLine("電視機封閉了");
    }
    public void SwitchChannel()
    {
      Console.WriteLine("電視機切換頻道");
    }
}
public class Light
{
    public void TunrOn()
    {
      Console.WriteLine("電燈翻開了");
    }
    public void TurnOff()
    {
      Console.WriteLine("電燈封閉了");
    }
}

Tv類的TurnOn(),TurnOff(),SwitchChannel(),Light類的TurnOn(),TurnOff(),這些辦法都邑經由過程履行IController的Execute辦法被觸發。把每種舉措籠統成類,並完成IControl接口。

public class LighOn : IControl
{
    private Light _light;
    public LighOn(Light light)
    {
      _light = light;
    }
    public void Execute()
    {
      _light.TunrOn();
    }
}
public class LightOff : IControl
{
    private Light _light;
    public LightOff(Light light)
    {
      _light = light;
    }
    public void Execute()
    {
      _light.TurnOff();
    }
}
public class TvOn : IControl
{
    private Tv _tv;
    public TvOn(Tv tv)
    {
      _tv = tv;
    }
    public void Execute()
    {
      _tv.TurnOn();
    }
}
public class TvOff : IControl
{
    private Tv _tv;
    public TvOff(Tv tv)
    {
      _tv = tv;
    }
    public void Execute()
    {
      _tv.TurnOff();
    }
}
public class TvSwitch : IControl
{
    private Tv _tv;
    public TvSwitch(Tv tv)
    {
      _tv = tv;
    }
    public void Execute()
    {
      _tv.SwitchChannel();
    }
}

如今,電視機和電燈有了,觸發各類舉措的類有了,遙控器該裝下這些指令(供給裝下指令的辦法)並供給辦法供客戶端挪用。

public class RemoteControl
{
    private IList<IControl> onCommands = new List<IControl>();
    private IList<IControl> offCommands = new List<IControl>();
    private IList<IControl> switchCommands = new List<IControl>();
    public void AddOnCommand(IControl control)
    {
      onCommands.Add(control);
    }
    public void AddOffCommand(IControl control)
    {
      offCommands.Add(control);
    }
    public void AddSwitchCommand(IControl control)
    {
      switchCommands.Add(control);
    }
    public void PressOnButton(int number)
    {
      onCommands[number].Execute();
    }
    public void PressOffButton(int number)
    {
      offCommands[number].Execute();
    }
    public void PressSwitchButton(int number)
    {
      switchCommands[number].Execute();
    }
}

客戶真個履行邏輯年夜致是:把電視機、電燈預備好,把各類指令預備好,拿出遙控器把各類指令收納個中,最初挪用遙控器的辦法履行各類指令。

class Program
{
    static void Main(string[] args)
    {
      //敕令的吸收方
      Light light = new Light();
      Tv tv = new Tv();
      //各類敕令
      LighOn turnLightOn = new LighOn(light);
      LightOff turnLightOff = new LightOff(light);
      TvOn turnTvOn = new TvOn(tv);
      TvOff turnTvOff = new TvOff(tv);
      TvSwitch switchTv = new TvSwitch(tv);
      //RemoteConroller組裝敕令
      RemoteControl control = new RemoteControl();
      control.AddOnCommand(turnLightOn);
      control.AddOnCommand(turnTvOn);
      control.AddOffCommand(turnLightOff);
      control.AddOffCommand(turnTvOff);
      control.AddSwitchCommand(switchTv);
      control.PressOnButton(0);
      Console.ReadKey();
    }
}

總結:敕令形式的需求源自想經由過程一個指令(好比這裡IControl的Execute辦法)來掌握多個類的多個辦法,包括了幾個要素:

1、敕令:讓類的各類辦法籠統成類完成一個接口
2、拆卸敕令:把各類敕令放到一個聚集中
3、觸發敕令:供給辦法挪用敕令聚集中的某條敕令,讓其履行指令

信任本文所述對年夜家C#法式設計的進修有必定的贊助自創價值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved