Decorator(裝飾者模式)
目的
動態的給某個物件增加一些額外的職責,一種實現繼承的替代方法
在不改變原本物件的基礎上,通過其進行包裝與擴展,使原有物件可以滿足用戶得更複雜需求,也不會影響到原本的物件
Code
class MacBook {
cost() {
return 997;
}
screenSize() {
return 11.6;
}
}
function Memory(macbook) {
let v = macbook.cost();
macbook.cost = function() {
return v + 75;
};
}
// Decorator 2
function Engraving(macbook) {
let v = macbook.cost();
macbook.cost = function() {
return v + 200;
};
}
// Decorator 3
function Insurance(macbook) {
let v = macbook.cost();
macbook.cost = function() {
return v + 250;
};
}
let mb = new MacBook();
Memory(mb);
Engraving(mb);
Insurance(mb);
console.log(mb.cost());// Outputs: 1522
console.log(mb.screenSize());// Outputs: 11.6
優點
只關心自身的核心任務,實現解耦
方便動態擴充功能,比繼承多了更多的靈活性
缺點
多層的話會較複雜
常常引入小物件,看起來相似,實際功能卻不對,讓我們的架構變得複雜
Last updated
Was this helpful?