CoffeeScript 橋接模式

2022-06-29 17:14 更新

橋接模式

問題

你需要為代碼保持一個(gè)可靠的接口,可以經(jīng)常變化或者在多種實(shí)現(xiàn)間轉(zhuǎn)換。

解決方案

使用橋接模式作為不同的實(shí)現(xiàn)和剩余代碼的中間體。

假設(shè)你開發(fā)了一個(gè)瀏覽器的文本編輯器保存到云。然而,現(xiàn)在你需要通過獨(dú)立客戶端的端口將其在本地保存。

class TextSaver
    constructor: (@filename, @options) ->
    save: (data) ->

class CloudSaver extends TextSaver
    constructor: (@filename, @options) ->
        super @filename, @options
    save: (data) ->
        # Assuming jQuery
        # Note the fat arrows
        $( =>
            $.post "#{@options.url}/#{@filename}", data, =>
                alert "Saved '#{data}' to #{@filename} at #{@options.url}."
        )

class FileSaver extends TextSaver
    constructor: (@filename, @options) ->
        super @filename, @options
        @fs = require 'fs'
    save: (data) ->
        @fs.writeFile @filename, data, (err) => # Note the fat arrow
            if err? then console.log err
            else console.log "Saved '#{data}' to #{@filename} in #{@options.directory}."

filename = "temp.txt"
data = "Example data"

saver = if window?
    new CloudSaver filename, url: 'http://localhost' # => Saved "Example data" to temp.txt at http://localhost
else if root?
    new FileSaver filename, directory: './' # => Saved "Example data" to temp.txt in ./

saver.save data

討論

橋接模式可以幫助你將特定實(shí)現(xiàn)的代碼置于看不見的地方,這樣你就可以專注于你的程序中的具體代碼。在上面的示例中,應(yīng)用程序的其余部分可以稱為saver.save data,不考慮文件的最終結(jié)束。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)