小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Command 命令模式

 路人甲Java 2021-07-06

>>返回《C#常用設(shè)計(jì)模式》

1. 簡介

方法調(diào)用封裝起來: 通過封裝方法調(diào)用,可以把運(yùn)算塊封裝成形,所以調(diào)用此運(yùn)算對(duì)象不需要知道事情是如何進(jìn)行的。通過封裝方法調(diào)用,可以實(shí)現(xiàn)一些很聰明的事,比如日志記錄。

  • 類圖

    其中提到的一個(gè)Command,可能為多個(gè)
  • 日志的封裝
    • Ilogger就是Invoker
    • ILogger中的info、warn等方法就是執(zhí)行的Command
    • Receiver就是對(duì)應(yīng):FileWriter、DBWriter

2. 示例


//遙控器 Invoker
public class RemoteControl
{
    private readonly ICommand _onCommand;
    private readonly ICommand _offCommand;

    public RemoteControl()
    {
        var noCommand = new NoCommand();
        _onCommands = noCommand;
        _offCommands = noCommand;
    }

    public void SetCommand(ICommand onCommand, ICommand offCommand)
    {
        _onCommand = onCommand;
        _offCommand = offCommand;
    }

    public void OnButtonWasPushed()
    {
        _onCommand.Execute();
    }

    public void OffButtonWasPushed()
    {
        _offCommand.Execute();
    }
}

//Command
public interface ICommand
{
    void Execute();
    void Undo();
}

//NoCommand對(duì)象是一個(gè)空對(duì)象,當(dāng)你不想返回一個(gè)有意義的對(duì)象時(shí),空對(duì)象就很有用
public class NoCommand : ICommand
{
    public void Execute()
    {
        Console.WriteLine("No command was executed!");
    }
    public void Undo()
    {
        Console.WriteLine("No command was executed!");
    }
}

//ConcreteCommand
public class LightOffCommand : ICommand
{
    private readonly Light _light;

    public LightOffCommand(Light light)
    {
        _light = light;
    }

    public void Execute()
    {
        _light.Off();
    }

    public void Undo()
    {
        _light.On();
    }
}
public class LightOnCommand : ICommand
{
    private readonly Light _light;//這個(gè)字段就是ConcreteCommand中的一個(gè)Receiver,多用組合少用繼承!

    public LightOnCommand(Light light)
    {
        _light = light;
    }

    public void Execute()
    {
        _light.On();
    }

    public void Undo()
    {
        _light.Off();
    }
}

//Receiver
public class Light
{
    public void On()
    {
        Console.WriteLine("light's on");
    }

    public void Off()
    {
        Console.WriteLine("light's off");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var control = new RemoteControl();
        var light = new Light();
        var lightOnCommand = new LightOnCommand(light);
        var lightOffCommand = new LightOffCommand(light);

        control.SetCommand(lightOnCommand, lightOffCommand);
        control.OnButtonWasPushed();
        Console.ReadKey();
    }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多