什么是命令模式

成都创新互联公司是一家集网站建设,长寿企业网站建设,长寿品牌网站建设,网站定制,长寿网站建设报价,网络营销,网络优化,长寿网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
所谓命令模式,就是将一个请求封装为一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作的设计模式。
命令模式的实现方式
刘备三顾茅庐请诸葛亮出山之后,曹操派夏侯惇攻打刘备。刘备让诸葛亮指挥各位将军,诸葛亮“恐关、张二人不肯听吾号令”,刘备“便以剑印付孔明,孔明遂聚集众将听令。”
诸葛亮成了命令的发布者:
public classZhugeLiang { Commandcommand;
public voidsetCommand(Command command){ this.command= command; }
public voidpublishCommand(){ command.execute(); }
} |
各位将军们成为了命令的接收者和执行者
public classGeneral {
privateStringname="";
publicGeneral(Stringname) { this.name=name; }
public voidexecute(Command command){ Log.e("诸葛亮命令"+name,command.getAction()); }
} |
在豫山埋伏的命令
public classYushanCommandextendsCommand { publicYushanCommand(General general) { super(general); }
@Override publicString getAction() { return"引一千军往豫山埋伏……纵兵出击,就焚其粮草。"; } } |
在安林埋伏的命令
public classAnlinCommandextendsCommand { publicAnlinCommand(General general) { super(general); }
@Override publicString getAction() { return"引一千军去安林背后山谷中埋伏,……向博望城旧屯粮草处纵火烧之。"; } } |
勾引夏侯惇等人进埋伏圈的命令
public classSeduceCommandextendsCommand { publicSeduceCommand(General general) { super(general); }
@Override publicString getAction() { return"为前部,不要赢,只要输。"; } } |
让具体的将军们执行命令
ZhugeLiang zhugeLiang =newZhugeLiang(); zhugeLiang.setCommand(newYushanCommand(newGeneral("关羽"))); zhugeLiang.publishCommand(); zhugeLiang.setCommand(newAnlinCommand(newGeneral("张飞"))); zhugeLiang.publishCommand(); zhugeLiang.setCommand(newSeduceCommand(newGeneral("赵云"))); zhugeLiang.publishCommand(); |
诸葛亮初出茅庐便大获全胜,读者们也学会了命令模式。
Android源码中的命令模式
(1)命令模式不但让发布者与接收者解耦,也使得整个过程变得可控。Handler、Message、AsyncTask的执行流程都是命令模式的体现。
Android开发中如何利用命令模式
命令模式有更弱的耦合性、更灵活的控制性以及更好的扩展性。因此适用于以下场景:
(1)在不同的时刻制定、排列和执行请求时。
(2)当系统可能崩溃而需要按照修改日志重做时。
(3)当需要支持取消操作或者事务操作的时候。
需要注意的几个问题
命令模式让开发者之间的协作和工作交接变得简便,但调用逻辑却变得异常复杂。同时带来了大量衍生类,让代码过度膨胀。
当前标题:【设计模式与Android】命令模式——军令如山
文章地址:
http://www.cdxtjz.cn/article/gggidi.html