命令模式 (Command pattern) 是一种行为型设计模式,用于表示对象之间的调用关系。当需要执行不同对象的不同操作时,可以通过命令模式创建具体的命令来实现。命令模式包括如下角色:
要将参数传递给命令,可以使用命令模式的参数传递方式:将参数封装成构造函数传入到具体命令类,再从具体命令传递给具体操作。例如,以下将命令模式应用到天气预报查询示例中:
// 封装命令参数及执行函数
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元无门槛券
手把手带您无忧上云