操作,命令,执行分离。
把操作封装成命令,然后执行、
//javascript 模式
var cannon = {
// 大炮
shot: function(){
console.log('大炮射击');
}
};
var plane = {
// 飞机
bomb: function(){
console.log('飞机投弹');
},
retreat: function(){
console.log('飞机撤退');
}
};
var PlaneCommand = function(obj){
return {
execute: function(){
obj.bomb();
},
undo: function(){
obj.retreat();
}
}
}
var CannonCommand = function(obj){
return {
execute: function(){
obj.shot();
}
}
}
var setCommand = function(btn1, command){
btn1.onclick = function(){
command.apply(this, arguments);
}
}
// 创建按钮
var createButton = function(name){
var btn = document.createElement('button');
btn.innerHTML = name;
return document.body.appendChild(btn);
}
var cannonCommand = CannonCommand(cannon);
var planeCommand = PlaneCommand(plane);
var btn1 = createButton('飞机轰炸');
var btn2 = createButton('飞机撤退');
var btn3 = createButton('大炮射击');
setCommand(btn1, planeCommand.execute);
setCommand(btn2, planeCommand.undo);
setCommand(btn3, cannonCommand.execute);