首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

命令模式:如何将参数传递给命令?

命令模式 (Command pattern) 是一种行为型设计模式,用于表示对象之间的调用关系。当需要执行不同对象的不同操作时,可以通过命令模式创建具体的命令来实现。命令模式包括如下角色:

  • 抽象命令类(Command): 对命令的共性抽象,包括执行命令、传递参数以及恢复现场的功能。
  • 具体命令类(ConcreteCommand): 封装了具体的操作,接受抽象命令类作为参数,实现具体操作。
  • 调度器(Invoker): 负责调用具体命令,在具体命令中执行命令逻辑,并将结果返回到其他对象中。
  • 调用者(Client): 向调度器发起命令请求,调用者无需关心命令的具体执行。

要将参数传递给命令,可以使用命令模式的参数传递方式:将参数封装成构造函数传入到具体命令类,再从具体命令传递给具体操作。例如,以下将命令模式应用到天气预报查询示例中:

代码语言:txt
复制
// 封装命令参数及执行函数
public abstract class Command
{
    private string parameter;

    protected Command(string parameter)
    {
        this.parameter = parameter;
    }

    public virtual void Execute()
    {
        Console.WriteLine($"{parameter} has been executed.");
    }
}

// 具体命令类,封装天气查询逻辑
public class WeatherForecastCommand : Command
{
    private string location;

    public WeatherForecastCommand(string location) : base(location)
    {

    }

    public override void Execute()
    {
        HttpClient client = new HttpClient();
        string forecastUrl = $"http://api.weather.gov/forecast?q={location}&units=imperial&appid=a1fb00b42965ac9889f570ae41a5ae50";
        var response = client.GetAsync(forecastUrl).Result;
        // ...
    }
}

// 请求天气信息的调用者
public static class WeatherService
{
    public static void GetWeatherForecast(string location)
    {
        Command command = new WeatherForecastCommand(location);
        command.Execute();
    }
}

// 将参数传递给命令(示例:调用天气服务)
WeatherService.GetWeatherForecast("New York")

在上面的示例中,WeatherForecastCommand 类接收具体命令参数 location。在具体命令的 Execute() 方法中,根据 location 参数执行天气查询逻辑后返回结果。这里我们没有指定一个特定品牌的云服务来传递参数查询天气,而是使用 http 请求从在线天气 API 获取所需信息。这展示了命令模式灵活性,可以在不限制云服务提供商的情况下传递参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

10分10秒

软件测试|Pytest命令行参数

20分35秒

10-命令行参数及用法

16分41秒

软件测试|Pytest常用命令行参数

15分25秒

101-尚硅谷-图解Java设计模式-命令模式(1)-工作原理

16分12秒

104-尚硅谷-图解Java设计模式-命令模式(4)-JdbcTml源码

9分51秒

105-尚硅谷-图解Java设计模式-命令模式(5)-内容梳理

25分25秒

Golang教程 数据结构和设计模式 74 命令模式 学习猿地

19分28秒

102-尚硅谷-图解Java设计模式-命令模式(2)-遥控器

23分57秒

103-尚硅谷-图解Java设计模式-命令模式(3)-遥控器

2分24秒

64.尚硅谷_Subversion_archetype命令参数说明.avi

9分14秒

251_尚硅谷_Go核心编程_命令行参数基本使用.avi

16分35秒

252_尚硅谷_Go核心编程_flag包解析命令行参数.avi

领券