14.Javascript设计模式之命令模式----Command
命令Command模式是GOF23种模式中的一种,是一种行为模式。
认识命令模式
在面向对象编程中,大量使用if…else…,或者switch…case…这样的条件选择语句是“最差实践”。通常这类代码,意味着有重构的余地。
命令模式就是干掉条件选择语句的利器。
通常命令模式的接口中只有一个方法。
实现类的方法有不同的功能,覆盖接口中的方法。
开始命令模式
提供一个接口
var ICommand = new Interface("ICommand",["execute"]);
提供一个接口的实现类
每一个实现类的方法就是if…else…的一个代码块中的代码。
//下面这个定义了一个开机命令 var PowerOnCommand = function(){}; implements(PowerOnCommand,ICommand); PowerOnCommand.prototype.execute = function(){ alert("已开机"); };
当然了,你还可以定义很多其他的命令来完成你其他的操作,比如关机,
//下面这个定义了一个关机命令 var PowerOffCommand = function(){}; implements(PowerOffCommand,ICommand); PowerOffCommand.prototype.execute = function(){ alert("已关机"); };
executeCommand方法定义
//这里定义一个执行用命令的方法,方法接受一个参数,即为ICommand接口的实现类的实例 var executeCommand = function(command){ command.execute(); };
运用命令模式
//开机 executeCommand(new PowerOnCommand()); //关机 executeCommand(new PowerOffCommand());
yes,就这么简单的实现了开机和关机的命令模式。
其实你仔细的一想,Windows的各种操作都是基于命令模式的,嘿嘿
当然,命令模式还可以使用其他方式来使用。不一定非用参数回调模式。
命令模式的核心思想是,带有某个方法的具体类的实例,作为接口传给使用方。对象的具体类型信息消失。
在使用方代码中拿到这个接口后调用这个接口的方法。
具体的执行效果,取决的命令发起人提供的对象是哪一个实现类的。这给了命令发起人完全的控制能力,而使用方代码不关心具体的命令类和方法。同时也使条件判断语句成为多余。
简单吗?命令模式其实就是这么简单。
估计我说的不够清楚-_-!!!