JavaScript設計模式-- 裝飾者(Decorator)模式
定義: 有一個目標性的去強化某個功能或東西。原有的方法名稱不變, 是透過覆寫(override)方法強化功能,因而被稱為"裝飾"。
e.g.
function Computer() {
this.cost = function() {
return 41900;
};
this.screenSize = function() {
return 12;
};
}
function addMemory(pc) {
var v = pc.cost();
pc.cost = function() { // 透過覆寫cost(), 以強化原有電腦功能
return v + 10000;
};
}
function addEngraving(pc) {
var v = pc.cost();
pc.cost = function() { // 透過覆寫cost(), 以強化原有電腦功能
return v + 1000;
};
}
function addInsurance(pc) {
var v = pc.cost();
pc.cost = function() { // 透過覆寫cost(), 以強化原有電腦功能
return v + 8590;
};
}
var nb = new Computer();
//增加記憶體、刻字、保固
addMemory(nb);
addEngraving(nb);
addInsurance(nb);
console.log(nb.cost()); // 61490
e.g.
function Computer() {
this.cost = function() {
return 41900;
};
this.screenSize = function() {
return 12;
};
}
function addMemory(pc) {
var v = pc.cost();
pc.cost = function() { // 透過覆寫cost(), 以強化原有電腦功能
return v + 10000;
};
}
function addEngraving(pc) {
var v = pc.cost();
pc.cost = function() { // 透過覆寫cost(), 以強化原有電腦功能
return v + 1000;
};
}
function addInsurance(pc) {
var v = pc.cost();
pc.cost = function() { // 透過覆寫cost(), 以強化原有電腦功能
return v + 8590;
};
}
var nb = new Computer();
//增加記憶體、刻字、保固
addMemory(nb);
addEngraving(nb);
addInsurance(nb);
console.log(nb.cost()); // 61490
留言
張貼留言