[原创]设计模式之命令模式详解
设计模式现如今已经被程序员越来越重视一个好的软件设计和设计模式息息相关,一个理想的模式的应用会使程序在可阅
读性上和扩展性上将大大提升,可以为后期的维护和扩展带来很大的便利,小弟在这里简单介绍设计模式只是想通过自己
所浅显的理解用自己的简单的语言表达出来让更多的初学者理解和使用上设计模式!
命令模式之命令模式,故名思意 命令模式 命令就是这个模式的关键之处,先来了解下现实中的命令 现实中命令也无处不
在.命令模式是关于处理一个对象请求另一个对象调用其方法去完成某一项任务!
举例说明:
士兵军训,教官对士兵下命令 跑步走,起步走,向左转 这就是一个命令,这其中士兵 就是命令的接受者,而跑步走 齐步
走 是一个明确的命令,教官此时是请求者 此处我们叫命令发起者! 这段语言描述其实就已经描述了一个明确的命令模
式!
命令请求者 命令执行者 具体命令
教官----------->士兵-------->向左转
在这里教官面对士兵时不需要和一个一个的士兵去打交道 让他们向左转,他只需要下命令向左转,士兵就会执行命令去向
左转!命令模式的核心就是使用命令对象来封装方法调用,就是在这里将教官的命令和士兵执行命令封装成一个命令对象
这样当教官下了某种命令的时候 教官只需要和命令打交道 教官只需要喊出 跑步走 士兵就会集体跑步走!
下面给出刚才所说的案例的具体Java代码的实现:
/*** 接受者实现方法* 士兵的动作实现类,跑步走,齐步走,向左转*/public class SoldierAction{ //士兵跑步走的具体实现 public void SoldierRun(){ System.out.println("士兵跑步走"); } //士兵齐步走的具体实现 public void SoldierQuickStep(){ System.out.println("士兵齐步走"); } //士兵向左转的实现 public void SoldierTurnLeft(){ System.out.println("士兵向左转"); }} /*** 这时候我们来创建教官命令接口* */public interface MasterCommand{ //一个执行命令的方法 public void executeCommand();}/*** 这时候我们来创建教官命令接口的实现类* 士兵跑步走命令的实现*/public class SoldierRunCommand implements MasterCommand{ private SoldierAction soldierCommand; public SoldierRunCommand(SoldierAction inputSoldierAction){ this.soldierCommand=inputSoldierAction; } //一个执行命令的方法 public void executeCommand(){ soldierCommand.SoldierRun(); }}/*** 这时候我们来创建教官命令接口的实现类* 士兵齐步走命令的实现*/public class SoldierQuickStepCommand implements MasterCommand{ private SoldierAction soldierCommand; public SoldierRunCommand(SoldierAction inputSoldierAction){ this.soldierCommand=inputSoldierAction; } //一个执行命令的方法 public void executeCommand(){ soldierCommand.SoldierQuickStep(); }}/*** 这时候我们来创建教官命令接口的实现类* 士兵向左转命令的实现*/public class SoldierTrunLeftCommand implements MasterCommand{ private SoldierAction soldierCommand; public SoldierRunCommand(SoldierAction inputSoldierAction){ this.soldierCommand=inputSoldierAction; } //一个执行命令的方法 public void executeCommand(){ soldierCommand.SoldierTurnLeft(); }}/*** 这时候我们来创建教官请求的实现类* 教官在这里发出命令*/public class MasterPublishCommand{ private MasterCommand masterCommand; public void setMasterCommand(MasterCommand inputCommand){ this.mMasterCommand=inputCommand; } //一个执行命令的方法 public void publishCommand(){ masterCommand.executeCommand(); }} public class TrainTroops{ public static void main(Stirng[]args){ //首先我们来创建命令接受者 SoldierAction sa=new SoldierAction(); //创建一条跑步的命令 MasterCommand runCommand=new SoldierRunCommand(); //创建一条齐步走的命令 MasterCommand stepCommand=new SoldierQuickStepCommand(); //创建一个向左转的命令 MasterCommand turnLeftCommand=new SoldierTurnLeftCommand(); //然后我们来创建一个教官 MasterPublishCommand master=new MasterPublishCommand(); //此时教官发布一条跑步的命令 master.setMasterCommand(runCommand); master.publishCommand(); //此时教官发布一条齐步走的命令 master.setMasterCommand(stepCommand); master.publishCommand(); //此时教官发布一条向左转的命令 master.setMasterCommand(turnLeftCommand); master.publishCommand(); } }