私はコマンドパターンを読んでいますが、コマンドパターンを示すためにブリッジ+コマンドパターンを使用しているようなサイトの例があります。Bridge +コマンドパターン
だから、最初、ウィキペディアから:https://en.wikipedia.org/wiki/Command_pattern、コマンドパターンの定義:
コマンドパターンは、オブジェクト がアクションを実行するために必要なすべての情報をカプセル化するために使用されている行動のデザインパターンがありますか イベントを後でトリガーします。この情報には、メソッド の名前、メソッドを所有するオブジェクト、メソッド の値が含まれます。
この定義では、コマンドパターンはかなりわかりやすく、ここにある本:https://addyosmani.com/resources/essentialjsdesignpatterns/book/#commandpatternjavascriptを読んでいるように見えますが、この例ではそのとおりです。
(function(){
var carManager = {
// request information
requestInfo: function(model, id){
return "The information for " + model + " with ID " + id + " is foobar";
},
// purchase the car
buyVehicle: function(model, id){
return "You have successfully purchased Item " + id + ", a " + model;
},
// arrange a viewing
arrangeViewing: function(model, id){
return "You have successfully booked a viewing of " + model + " (" + id + ") ";
}
};
carManager.execute = function (name) {
return carManager[name] && carManager[name].apply(carManager, [].slice.call(arguments, 1));
};
console.log(carManager.execute("arrangeViewing", "Ferrari", "14523"));
console.log(carManager.execute("requestInfo", "Ford Mondeo", "54323"));
console.log(carManager.execute("requestInfo", "Ford Escort", "34232"));
console.log(carManager.execute("buyVehicle", "Ford Escort", "34232"));
})();
この例では余分なものはありませんが、私はコマンドパターンしか見ることができません。しかし、バックウィキペディアに、彼らはコマンドパターンを紹介する次の例を使用します。
class Switch {
constructor() {
this._commands = [];
}
storeAndExecute(command) {
this._commands.push(command);
command.execute();
}
}
class Light {
turnOn() { console.log('turn on') }
turnOff() { console.log('turn off') }
}
class FlipDownCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOff();
}
}
class FlipUpCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOn();
}
}
var light = new Light();
var switchUp = new FlipUpCommand(light);
var switchDown = new FlipDownCommand(light);
var s = new Switch();
s.storeAndExecute(switchUp);
s.storeAndExecute(switchDown);
私は上記の例を見ると、私はすぐにブリッジパターンを見ると、彼らはすぐにその後、格納しているので、コマンドのパターンを見ますコマンドを呼び出す。
私の質問はこれです。 wikipediaの例では、コマンドパターンを示すためにbridge +コマンドパターンを使用していると思いますか?
EDIT:
私は第二の例を取ると、コマンドの部分を削除した場合、これはブリッジパターンではないでしょうか?
class Light {
turnOn() { console.log('turn on') }
turnOff() { console.log('turn off') }
}
class FlipDownCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOff();
}
}
class FlipUpCommand {
constructor(light) {
this._light = light;
}
execute() {
this._light.turnOn();
}
}
var light = new Light();
var switchUp = new FlipUpCommand(light);
var switchDown = new FlipDownCommand(light);
switchUp.execute();
switchDown.execute();
ブリッジ/コマンドの機能についてはわかりませんが、コマンド例として表示されるJSコードは機能しません。 IIFEがIIFEの外で利用可能な 'carManager'オブジェクトを作成したとしても、それは' .execute() 'メソッドを持っていません。 – nnnnnn
申し訳ありませんが、コードサンプルを正しくコピーしませんでした。それは修正されました。 –
あなたは上記の事例についてあなたが何を正確に混乱させているのか、そしてあなたが知りたいことを明確にすることができますか? – gyre