javascriptモード——Command
3555 ワード
計算機のプログラムを作るとしたら
コードを修正します.
入口関数を追加することにより、入力されたコマンドに従って、どの関数を呼び出すかを選択します.コードは以下の通りです
var calculator = {
add: function( x, y ){
return x + y;
},
sub: function( x, y ){
return x - y;
}
}
//
calculator.add(1,2);
calculator.addという直接的な呼び出しにより、加減算の計算機機能を実現しました.でも、多くの場合、直接にcaculatorに訪問したくないです.その理由は、他のオブジェクトのcacacalltorへの依存が増加するからです.考えてみてください.私たちは計算機の機能を実現しました.他の多くのところでcalculator.addを使って、多くの呼び出しをしています.この時、私達はcacalculator計算機というオブジェクトの構造を修正すると、すべての呼び出し計算機を同時に修正します.これはできるだけオブジェクトをデカップリングするOOP理論に大きく背いている.コードを修正します.
入口関数を追加することにより、入力されたコマンドに従って、どの関数を呼び出すかを選択します.コードは以下の通りです
var calculator = {
add: function( x, y ){
return x + y;
},
sub: function( x, y ){
return x - y;
}
}
// ,
calculator.calculate = function ( method ) {
return calculator[method] && calculator[method].apply( calculator, [].slice.call(arguments, 1) );
};
//
console.log( calculator.calculate('add',1,2) );
このとき、外部呼び出しは、cacacalltorオブジェクトへの依存を低減します.では、先ほどの問題を思い出してみます.cacalculatorの構造修正は外部呼び出しの修正を引き起こしますか?答えはできません.caculatorの構造が変わった時、私達はcaculatorのcalculateに対しても相応の調整を行うだけで、外部の呼び出しは変化に従って必要としません.var calculator = {
box:{
add: function( x, y ){
return x + y;
},
sub: function( x, y ){
return x - y;
}
}
// other
}
// ,
calculator.calculate = function ( method ) {
return calculator.box[method] && calculator.box[method].apply( calculator, [].slice.call(arguments, 1) );
};
//
console.log( calculator.calculate('add',1,2) );