行为型模式 - 命令模式Command
2024-10-21 04:11:25
模式的定义与特点
命令模式(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之后记得点赞哟!
- 小伙伴你还想要别的知识?好的呀,分享给你们
今日推荐
最新文章
- iOS网络相关知识总结
- input失去隐藏光标(移动端)
- salesforce 零基础学习(三十九) soql函数以及常量
- Docker上运行dotnet core
- CSS设计模式之三权分立模式篇
- transactionCurrencyId needs to be supplied to format a transaction money field.
- IE6 png 透明 (三种解决方法)
- ArcGIS for Silverlight 地图卷帘
- php jquery+ajax写批量删除
- MYSQL的REPLACE和ON DUPLICATE KEY UPDATE使用
- 关于Springmvc中include与Sitemesh装饰器的基本使用
- 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试
- R语言学习——实例标识符
- [数学笔记Mathematical Notes]1-调和级数发散的一个简单证明
- Codeforces Round #485 (Div. 2) F. AND Graph
- Spring Boot Starter 的基本封装
- cloud_note项目
- JAVA(四)类集/枚举
- pip离线安装软件包
- HTTP API 设计指南(结尾)