当前位置: 首页 > news >正文

C#设计模式(15)命令模式(Command Pattern)

命令模式(Command Pattern)

命令模式是一种数据驱动的设计模式,属于行为型模式类别。请求被包装在一个对象中作为命令,并传递给调用对象。调用对象寻找可以处理该命令的合适对象,并将命令传递给相应的对象,该对象执行命令。

实现

  1. 步骤 1:创建一个命令接口。

    public interface IOrder {void Execute();
    }
  2. 步骤 2:创建一个请求类。

public class Stock {private string name = "ABC";private int quantity = 10;public void Buy(){Console.WriteLine($"Stock [ Name: {name}, Quantity: {quantity} ] bought");}public void Sell(){Console.WriteLine($"Stock [ Name: {name}, Quantity: {quantity} ] sold");}
}
  1. 步骤 3:创建实现 IOrder 接口的具体类。
public class BuyStock : IOrder {private Stock abcStock;public BuyStock(Stock abcStock){this.abcStock = abcStock;}public void Execute() {abcStock.Buy();}
}public class SellStock : IOrder {private Stock abcStock;public SellStock(Stock abcStock){this.abcStock = abcStock;}public void Execute() {abcStock.Sell();}
}
  1. 步骤 4:创建命令调用类。
public class Broker {private List<IOrder> orderList = new List<IOrder>(); public void TakeOrder(IOrder order){orderList.Add(order);    }public void PlaceOrders(){foreach (IOrder order in orderList) {order.Execute();}orderList.Clear();}
}
  1. 步骤 5:使用 Broker 类接受并执行命令。
public class CommandPatternDemo {public static void Main(string[] args) {Stock abcStock = new Stock();BuyStock buyStockOrder = new BuyStock(abcStock);SellStock sellStockOrder = new SellStock(abcStock);Broker broker = new Broker();broker.TakeOrder(buyStockOrder);broker.TakeOrder(sellStockOrder);broker.PlaceOrders();}
}
  1. 步骤 6:验证输出。
Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold
http://www.lryc.cn/news/113169.html

相关文章:

  • 快速排序和qsort函数详解详解qsort函数
  • 搭建 elasticsearch8.8.2 伪集群 windows
  • C++ 运算符重载为成员函数
  • 51单片机程序烧录教程
  • Linux C++ 链接数据库并对数据库进行一些简单的操作
  • Linux进程间通信--msgsnd函数的作用
  • P1629 邮递员送信(最短路)(内附封面)
  • 网络安全--原型链污染
  • Harbor企业镜像仓库部署
  • 【AI】《动手学-深度学习-PyTorch版》笔记(十一):分类问题-softmax回归
  • 【排序算法略解】(十种排序的稳定性,时间复杂度以及实现思想)(含代码)(完工于2023.8.3)
  • 学编程实用网站
  • Camunda 7.x 系列【5】 员工请假流程模型
  • 【C++从0到王者】第十七站:手把手教你写一个stack和queue及deque的底层原理
  • ffmpeg.c源码与函数关系分析
  • GD32F103待机模式与唤醒
  • 【Linux初阶】基础IO - 动静态库 | 初识、生成、链接、加载
  • 为Git仓库设置签名信息
  • iOS开发Swift开发UI页面链式调用库推荐
  • ClickHouse SQL与引擎--基本使用(一)
  • 2023-08-07力扣今日七题-好题
  • 支持多用户协同的思维导图TeamMapper
  • 【Vue】Parsing error: No Babel config file detected for ... vue
  • 2023-08-07力扣今日五题
  • ETHERCAT转PROFIBUS连接到300plc的配置方法
  • Spring Boot配置文件与日志文件
  • 可解释性分析的一些类别(草稿)(视觉)
  • HTTPS-RSA握手
  • bigemap国土管理行业应用
  • 深入探索 Splashtop Enterprise 的潜力