JavaScript 备忘录模式

233 阅读1分钟

保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

大家都见过,历史记录这玩意就是备忘录模式


class Browser {
    constructor() {
        this.fallBackNumber = 2
        this.address = ''
        this.memoryCareTaker = new MemoryCareTaker()
    }
    
    setAddress(address) {
        this.address = address
        this.memoryCareTaker.add(this.setAddressToMemory())
        if(this.fallBackNumber !== 2) this.fallBackNumber = 2
        console.log('当前:', this.address)
    }
    
    getAddress(address) {
        return this.address
    }
    
    setAddressToMemory() {
        return new Memory(this.address)
    }
    
    getAddressFromMemory(memory) {
        this.content = memory.getContent()
    }
    
    fallBack() {
        const lg = this.memoryCareTaker.getLength()
        
        this.address = this
            .memoryCareTaker
            .get(lg-(this.fallBackNumber++))
            .getContent()
            
        console.log('退后到:', this.getAddress())
    }
}

class Memory {
    constructor(content) {
        this.content = content
        console.log('记录:', this.content)
    }
    
    getContent() {
        return this.content
    }
}

class MemoryCareTaker {
    constructor() {
        this.memoryList = []
    }
    
    add(memory) {
        this.memoryList.push(memory)
    }
    
    get(index) {
        return this.memoryList[index]
    }
    
    getLength() {
        return this.memoryList.length
    }
}

const browser = new Browser()
browser.setAddress('www.baidu.com')
browser.setAddress('www.bilibili.com')
browser.setAddress('juejin.im/timeline')
browser.fallBack()
browser.fallBack()
browser.setAddress('www.bilibili.com')
browser.fallBack()
browser.fallBack()

/**
 *   打印的值为:
 *   记录: www.baidu.com
 *   当前: www.baidu.com
 *   记录: www.bilibili.com
 *   当前: www.bilibili.com
 *   记录: juejin.im/timeline
 *   当前: juejin.im/timeline
 *   退后到: www.bilibili.com
 *   退后到: www.baidu.com
 *   记录: www.bilibili.com
 *   当前: www.bilibili.com
 *   退后到: juejin.im/timeline
 *   退后到: www.bilibili.com
*/