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?