成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[設(shè)計(jì)模式][面板模式][Javascript]

yexiaobai / 2372人閱讀

摘要:對(duì)于客戶來(lái)說(shuō)只需要知道面板層,而不需要知道被面板層包裝的子系統(tǒng),從而降低耦合。職責(zé)是從中獲取接口,調(diào)用對(duì)應(yīng)的服務(wù)。在層,其實(shí)也做了一個(gè)的設(shè)計(jì),它把各個(gè)模塊看做是子系統(tǒng),然后進(jìn)行封裝出需要的角色提供的的面板實(shí)現(xiàn)調(diào)用參考

  

The Facade Pattern is an object that provide a simplified interface to a larger body of code, such as a class library. A Facade can
+ make a software library easier to use, understand and test, since the facade has convenient methods for common tasks
+ make the library more readable, for the same reason;
+ reduce dependencies of outside code on the inner working of a library, since most code uses the facade, thus allowing more flexibility in developing the system
+ wrap a poorly designed collection of APIs with a single well-designed API
From http://en.wikipedia.org/wiki/Facade_pattern

定義

外觀模式的目標(biāo)是為子系統(tǒng)提供一個(gè)一致的"界面",定義了一個(gè)高層的接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用

客戶如果直接使用子系統(tǒng),需要對(duì)子系統(tǒng)“知道”的更多,“知道”本身就增加了耦合
在子系統(tǒng)上抽象出一個(gè)面板層,面板層是對(duì)子系統(tǒng)爆出路的接口的包裝。對(duì)于客戶來(lái)說(shuō)只需要知道面板層,而不需要知道被面板層包裝的子系統(tǒng),從而降低耦合。
如果有一天更換子系統(tǒng),同樣的只要抽象出一致的面板層,對(duì)客戶來(lái)說(shuō)調(diào)用沒(méi)有發(fā)生變化。

需求

對(duì)于智能手機(jī)的開(kāi)發(fā),新興起一種Hybrid開(kāi)發(fā),在手機(jī)App中嵌入web,通過(guò)javascript與手機(jī)底層的通信,來(lái)實(shí)現(xiàn)web本身不能實(shí)現(xiàn)的功能

native層需要暴露出一組公共的接口,web層通過(guò)調(diào)用這些接口達(dá)到同樣的工作目標(biāo)

類圖

工作中的實(shí)際案例,所以對(duì)Hybrid這里的設(shè)計(jì)摻雜了橋接模式和面板模式兩種,另外還有些移動(dòng)端Hybrid的知識(shí)補(bǔ)充。

關(guān)于Hybrid的知識(shí),另外有文檔補(bǔ)充,簡(jiǎn)單說(shuō)一下,Hybrid核心的URL Scheme,關(guān)于URL Scheme可以參考這篇文章,很犀利:http://xujiwei.com/blog/2011/09/ios-app-custom-url-scheme-design/

對(duì)于URL Scheme的支持,Android從4.4開(kāi)始,IOS開(kāi)始的版本較早,未考證??梢园製rl schem看做是暴露出來(lái)的API,把native底層看做是一個(gè)子系統(tǒng),所以需要構(gòu)建UrlSchemeFacade來(lái)封裝子系統(tǒng)露出來(lái)的接口。

HybridBridge職責(zé)是從UrlSchemeFacade中獲取接口,調(diào)用對(duì)應(yīng)的服務(wù)。
在Native層,其實(shí)也做了一個(gè)Facade的設(shè)計(jì),它把各個(gè)模塊看做是子系統(tǒng),然后進(jìn)行封裝出需要的URL Scheme

角色

UrlSchemeFacade (Facade): Native提供的Url Scheme的面板

實(shí)現(xiàn)
var prototype = require("prototype");

var UrlSchemeFacade = prototype.Class.create({

  nativeInterfaceMap: {
    "geo.locate": "ctrip://wireless/geo/locate",
    "device.info": "ctrip://wireless/device/info"
  },

  getUrlScheme: function(key) {
    return this.nativeInterfaceMap[key];
  }

});

UrlSchemeFacade.API = {
  "GEOLOCATE":"geo.locate",
  "DEVICEINFO": "device.info"
}

var HybridBridge = prototype.Class.create({

  initialize: function(facade) {
    this.urlSchemeFacade = facade;
  },

  request: function(api) {
    var url = this.urlSchemeFacade.getUrlScheme(api);
    console.log(url);

    // @todo 調(diào)用url scheme
    // window.location.replace = url;
  }

});

var Main = function () {
  var urlSchemeFacade = new UrlSchemeFacade();
  var hybridBridge = new HybridBridge(urlSchemeFacade);

  hybridBridge.request(UrlSchemeFacade.API.GEOLOCATE);
}

Main();
參考

http://baike.baidu.com/view/1151448.htm

http://www.cnblogs.com/kid-li/archive/2006/07/10/446904.html

http://en.wikipedia.org/wiki/Facade_pattern

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85269.html

相關(guān)文章

  • 高性能JavaScript(文檔)

    摘要:最近在全力整理高性能的文檔,并重新學(xué)習(xí)一遍,放在這里方便大家查看并找到自己需要的知識(shí)點(diǎn)。 最近在全力整理《高性能JavaScript》的文檔,并重新學(xué)習(xí)一遍,放在這里方便大家查看并找到自己需要的知識(shí)點(diǎn)。 前端開(kāi)發(fā)文檔 高性能JavaScript 第1章:加載和執(zhí)行 腳本位置 阻止腳本 無(wú)阻塞的腳本 延遲的腳本 動(dòng)態(tài)腳本元素 XMLHTTPRequest腳本注入 推薦的無(wú)阻塞模式...

    RayKr 評(píng)論0 收藏0
  • 在 Chrome 中 JavaScript 數(shù)組到底占用了多少內(nèi)存?

    摘要:原文譯者因?yàn)槲以髡叩拇a使用的很大的內(nèi)存,所以我看了一下字符串對(duì)象數(shù)字和數(shù)組分別占用了多少內(nèi)存。位是字節(jié),但是每個(gè)數(shù)字平均占用了字節(jié)。同樣,將每個(gè)空數(shù)組的大小顯示為字節(jié),每個(gè)空對(duì)象的大小為字節(jié)。另外,并不是所有的數(shù)組在內(nèi)部都是相同的。 原文:How much memory do JavaScript arrays take up in Chrome?譯者:justjavac 因?yàn)槲遥?..

    Ajian 評(píng)論0 收藏0
  • 一個(gè)前端程序猿的Sublime Text3的自我修養(yǎng)

    摘要:效果如下配置方法參考下的配置方法完美支持提供了比默認(rèn)更好的語(yǔ)法高亮,而且他完美支持。語(yǔ)法高亮默認(rèn)安裝的對(duì)的支持讓人抓狂,幀動(dòng)畫(huà)別開(kāi)玩笑了你只會(huì)看到一片白色的純文本一樣的代碼。事實(shí)上不光,我建議用完全替代原來(lái)的來(lái)完成語(yǔ)法高亮。 文章轉(zhuǎn)載自本人的博客《三省吾身丶丶》點(diǎn)擊查看喜歡的話請(qǐng)瘋狂的推薦吧! ^_^ 本文章會(huì)在本人有插件或者設(shè)置更新時(shí),進(jìn)行不定時(shí)更新 偷懶了,圖片地址直接設(shè)置的博客...

    KunMinX 評(píng)論0 收藏0
  • Visual Studio Code前端開(kāi)發(fā)使用之旅

    摘要:更好的斷點(diǎn)控制啟用禁用重新啟用可以在調(diào)試視圖中的斷點(diǎn)區(qū)域設(shè)置。編輯器邊距中的斷點(diǎn)一般用紅色的實(shí)心圓表示。前端開(kāi)發(fā)必備插件功能性插件匹配標(biāo)簽,關(guān)閉對(duì)應(yīng)的標(biāo)簽。這可以使得團(tuán)隊(duì)內(nèi)的書(shū)寫(xiě)更為規(guī)范且具有一致性。 Visual Studio Code是個(gè)現(xiàn)下比較流行的編輯器,啟動(dòng)非常快,完全可以用來(lái)代替其他文本文件編輯工具。又可以用來(lái)做開(kāi)發(fā),支持各種語(yǔ)言,相比其他IDE,輕量級(jí)完全可配置還集成Gi...

    stormjun 評(píng)論0 收藏0
  • 如何更愉快地使用rem —— 別說(shuō)你懂CSS相對(duì)單位

    摘要:值得注意的是,這個(gè)設(shè)置對(duì)使用或其他絕對(duì)單位定義的字號(hào)大小無(wú)效。事實(shí)上,提供了一個(gè)在和間的相對(duì)單位折中解決方案,而且更易于使用。圖使用相對(duì)單位和繼承字號(hào)的面板下面是模板,加到你的頁(yè)面吧。 showImg(https://segmentfault.com/img/bVbdOMr?w=920&h=450); 前段時(shí)間試譯了Keith J.Grant的CSS好書(shū)《CSS in Depth》,其...

    Snailclimb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<