模式的定义与特点
命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。
模式的优点
- 可扩展性较好,灵活。
- 降低了系统耦合度。
- 新的命令可以很容易添加到系统中去。
模式的缺点
- 使用命令模式可能会导致某些系统有过多的具体命令类。
using DesignPattern.CommandPattern;
using System;
namespace DesignPattern
{
internal class Program
{
static void Main(string[] args)
{
CommandHelper();
}
#region Pattern - Command
static void CommandHelper()
{
Invoker _invoker = new Invoker();
Receiver _receiver = new Receiver();
ICommand _concreteCommand = new ConcreteCommand(_receiver);
_invoker.SetCommand(_concreteCommand);
_invoker.ExecuteCommand();
Console.ReadLine();
}
#endregion
}
}
//======================================================================================
namespace DesignPattern.CommandPattern
{
/// <summary>
/// 命令,需要执行的所有命令都在这里声明。
/// </summary>
internal interface ICommand
{
/// <summary>
/// 发布命令
/// </summary>
void Exrcute();
}
//======================================================================================
/// <summary>
/// 调用命令者,绑定一个命令,并执行该命令。
/// </summary>
internal class Invoker
{
private ICommand m_command;
public void SetCommand(ICommand command)
{
this.m_command = command;
}
public void ExecuteCommand()
{
m_command.Exrcute();
}
}
//======================================================================================
/// <summary>
/// 命令接收者、执行者。 任何类都可以成为接收者
/// </summary>
internal class Receiver
{
public void Function()
{
Console.WriteLine("接收者接到命令,并且执行了");
}
}
//======================================================================================
/// <summary>
/// 一个具体的命令
/// </summary>
internal class ConcreteCommand : ICommand
{
Receiver m_receiver;
/// <summary>
/// 一个具体的命令,将一个接收者绑定,调用接收者相应的操作,以实现执行命令。
/// </summary>
public ConcreteCommand(Receiver receiver)
{
this.m_receiver = receiver;
}
public void Exrcute()
{
m_receiver.Function();
}
}
}
总结:
个人觉得命令者模式,和我们常用的事件差不多,ICommand等于Event,Receiver等于被注册的函数,Invoker等于执行Event的函数。拙见,不对的话还望指出。
希望大家:点赞,留言,关注咯~
😘😘😘😘
唠家常
今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加我QQ:841298494,大家一起进步。
- 客官,看完get之后记得点赞哟!
- 小伙伴你还想要别的知识?好的呀,分享给你们😄
今日推荐
- 博客杂货铺
- GoF23 种设计模式的分类和功能