js裝飾器模式


// 裝飾器模式 運行時動態添加附加功能到對象中
/**
 * 1 當我們有這樣一個場景:一個筆 造價是一元錢
 * 如果跨省買這只筆增加一元錢運費
 * 如果零售增值2元
 * 如果打八折
 */
//es6實現
class Pen {
    // 添加靜態方法
    static decorate() {
        return {
            kuasheng: {
                getPrice(price) {
                    return price + 1;
                }
            },
            lingshou: {
                getPrice(price) {
                    return price +2;
                }
            },
            dazhe: {
                getPrice(price) {
                    return price * .8;
                }
            }
        }
    }
    constructor(price) {
        this.price = price; //類的實例屬性初始化價格
        this.decorate_list = [];// 存放裝飾器的數組
    }
    decorate(decorate) { // 類提供的裝飾方法
        this.decorate_list.push(decorate);
    }
    getPrice() {
        let price = this.price;
        this.decorate_list.forEach(res => {
            price = Pen.decorate()[res].getPrice(price);
        })
        return price;
    }

}
let pen = new Pen(1);// 出廠價是一元錢 這里可以自定義
pen.decorate('lingshou');// 讓它零售
pen.decorate('kuasheng');// 讓它跨省
console.log(pen.getPrice());// 4
let pen2 = new Pen(1);
pen2.decorate('lingshou');// 讓它零售
pen2.decorate('kuasheng');// 讓它跨省
pen2.decorate('dazhe');// 讓它打折
console.log(pen2.getPrice());// 3.2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM