JavaScript設計模式-- 策略(Strategy)模式
定義: 可在執行時期, 依照不同情況去選擇不同的策略方式。也就是使用相同的操作介面, 但卻能依照不同的程式內容去運作(但無論是什麼策略, 要達到的目的皆相同)。
e.g.
var data = {
name: "Mary",
message: "I am lucky!"
}; //資料封包
var Sender = function(strategy) { // 用來定義介面
this.strategy = strategy;
}; //核心物件,利用建構式置入策略
Sender.prototype.send = function(data) {
this.strategy.send(data);
}; //核心方法
var xmlStrategy = {
send: function(data) { // 因JavaScript沒工具幫忙轉, 所以自己轉
var str = "<xml><name>" + data.name + "</name><message>" + data.message + "</message></xml>";
console.log("Data:" + str);
}
}; //訂定策略-xmlStrategy
var jsonStrategy = {
send: function(data) {
console.log("Data:" + JSON.stringify(data)); // JSON.stringify()為將JSON格式轉成字串, 因資料在傳遞時, 是以字串型別傳遞。而JSON.parse()是將字串轉成物件型式, 因當資料傳結束後, 要進行資料處理, 因而需轉成物件。
}
}; //訂定策略-jsonStrategy
var xmlSender = new Sender(xmlStrategy);
var jsonSender = new Sender(jsonStrategy);
xmlSender.send(data); // Data: <xml><name>Mary</name><message>I am lucky!</message></xml>
jsonSender.send(data); // Data: {"name":"Mary","message":"I am lucky!"}
留言
張貼留言