欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > asp.net >内容正文

asp.net

设计模式的理解:命令模式 (command) -凯发ag旗舰厅登录网址下载

发布时间:2024/10/14 asp.net 34 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 设计模式的理解:命令模式 (command) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

命令模式(command pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

命令看成是函数方法,而这函数方法在不同的业务含义中,其参数个数,参数的数据类型,返回值可能不统一。把用户可以触发的功能当成一个命令,把这个“命令”封装成一个对象。把对象抛给接收者,让接收者处理其中的命令。而这个接收者可以接收命令的抽象类。这样接收者就可以间接的统一处理 接口不统一的函数方法了

以添加商品到购物车,删除购物车中的商品,支付购物车的商品为例:

class icommand{ public:virtual void execute() = 0; };class commodity{ public:string id; };class shoppingcart{ public:string cartid;list commodities; };//原先添加商品,需要传两个参数 (commodity,shoppingcart),现在用对象封装在构造函数和execute中 class addcommoditytocart :public icommand{commodity commodity ;shoppingcart shoppingcart ; public:void addcommoditytocart (commodity c, shoppingcart s):commodity(c),shoppingcart (s){}void execute() {shoppingcart.commodities.add(commodity );} };//原先删除商品,需要传两个参数 (shoppingcart,string ),现在用对象封装在构造函数和execute中 class removecommodity :public icommand{string commodityid;shoppingcart shoppingcart ; public:void removecommodity (shoppingcart s,string c):commodityid(c),shoppingcart (s){}void execute() {for(commodity commodity : shoppingcart.commodities){if(commodity.id == commodityid){shoppingcart.commodities.remove(commodity );}}} }; //原先清空购物车,需要传一个参数 (shoppingcart),现在用对象封装在构造函数和execute中 class paycart :public icommand{shoppingcart shoppingcart ; public:void paycart (shoppingcart s): shoppingcart (s){}void execute() {cout<<"购物车支付:";for(commodity commodity : shoppingcart.commodities){cout< commands; public:void addcommands(icommand* c){commands.add(c);};void action(icommand* c=nullptr){if(c !==nullptr)commands.add(c);for (int i =0 ;iexecute();}} };

而调用起来也是很方便的

receiver user_; shoppingcart usercart_;void executecommand(icommand * c){user.action(c);} void mainprocess(){commodity commodity1("book");commodity commodity1("game");addcommoditytocart addcommoditytocart(commodity1,usercart_);removecommoditytocart removecommoditytocart(usercart_,"book");paycart paycart(usercart_);user_.addcommand(&addcommoditytocart);user_.addcommand(&removecommoditytocart);executecommand(&paycart) ; //输出 购物车支付game; }

命令模式的实现,让receiver 对象成功处理 参数类型不同,参数个数不同,返回值不同的多个方法。当然在现如今已有更方便的实现方式可以满足 “接收处理 格式不统一的函数” 。 例如 模板/泛型 ,重载括号运算符(函数对象)等方式实现。毕竟虚函数的运行时绑定(动态绑定)要比编译时绑定的性能要低些。

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的设计模式的理解:命令模式 (command)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

网站地图