新書《JavaScript設(shè)計模式 》出版,感謝支持
本文關(guān)鍵詞:JavaScript啟示錄,由筆耕文化傳播整理發(fā)布。
小記
這本書的出版得益于人民郵電出版社陳冀康編輯的推薦,加上之前博客又翻譯了一些原作者的文字,所以就承擔了該書的翻譯工作,不同于博客的是,由于設(shè)計模式本身就難以表達,加上英文版有很多錯誤(評價不佳),原本年初就可以出版的書,一直等到5月份原作者更新最完善版本以后,前后進行了5次譯稿校對,才得以出版,再次感謝作為專業(yè)翻譯媳婦的幫忙和編輯的耐心。
本書介紹設(shè)計模式是解決軟件設(shè)計中常見問題的可復(fù)用方案。學(xué)習任何編程語言,設(shè)計模式都是一個令人興奮和極具吸引力的話題。
本書是JavaScript編程設(shè)計模式的學(xué)習指南。全書分為14章。首先介紹了什么是模式、模式的結(jié)構(gòu)、類別、模式的分類、如何編寫模式等等;然后,集中介紹了很多流行的設(shè)計模式在JavaScript中的應(yīng)用,包括Module(模塊)模式、Observer(觀察者)模式、Facade(外觀)模式和Mediator(中介者)模式;最后,還探討了模塊化的JavaScript模式、jQuery及其插件中的設(shè)計模式。
本書適合專業(yè)的Web開發(fā)人員和前端工程師閱讀。通過閱讀本書,他們將能夠提高對設(shè)計模式的認識,并學(xué)會如何將設(shè)計模式應(yīng)用到JavaScript編程語言中。 購買鏈接,,請查看右側(cè)的圖片。
章節(jié)示例Command模式旨在將方法調(diào)用、請求或操作封裝到單一對象中,從而根據(jù)我們不同的請求對客戶進行參數(shù)化和傳遞可供執(zhí)行的方法調(diào)用。此外,這種模式將調(diào)用操作的對象與知道如何實現(xiàn)該操作的對象解耦,并在交換出具體類(對象)方面提供更大的整體靈活性。
用基于類的編程語言解釋具體類是最恰當?shù),它們與抽象類的思想相關(guān)。一個抽象類定義一個接口,但不一定為它所有的成員函數(shù)提供實現(xiàn)。它作為一個基類,派生出其他類。實現(xiàn)缺失功能的派生類被稱為一個具體的類(見圖9-7)。
圖9-7 Command模式
Command模式背后的主要思想是:它為我們提供了一種分離職責的手段,這些職責包括從執(zhí)行命令的任意地方發(fā)布命令以及將該職責轉(zhuǎn)而委托給不同對象。
實施明智的、簡單的命令對象將把action動作和調(diào)用該動作的對象綁定在一起。它們始終包括一個執(zhí)行操作(如run()或execute())。所有具有相同接口的Command對象可以根據(jù)需要輕松交換,這被認為是該模式的一個更大好處。為了演示Command模式,我們將創(chuàng)建一個簡單的汽車購買服務(wù)。
(function () { var CarManager = { // 請求信息 requestInfo: function (model, id) { return "The information for " + model + " with ID " + id + " is foobar"; }, // 訂購汽車 buyVehicle: function (model, id) { return "You have successfully purchased Item " + id + ", a " + model; }, // 組織一個view arrangeViewing: function (model, id) { return "You have successfully booked a viewing of " + model + " ( " +id + " ) "; } }; })();
看一下上面的代碼,它可以通過直接訪問對象輕松地調(diào)用我們的CarManager方法。我們認為這里沒有任何錯誤,從技術(shù)上講,它是完全有效的JavaScript。然而,它在有些情況下可能是不利的。
例如,試想如果CarManager里的核心API改變了會怎么樣。這將要求程序里所有直接訪問這些方法的對象都需要進行修改。這可能被視為一個耦合層,它實際上最大程度地違反了松耦合對象的OOP方法論。而我們可以通過進一步抽象API來解決這個問題。
現(xiàn)在讓我們來擴展CarManager,這樣Command模式下的應(yīng)用程序會產(chǎn)生如下結(jié)果:接受任意可以在CarManager對象上執(zhí)行的命名方法,傳遞可以使用的任意數(shù)據(jù),如CarModel(模型)和ID。這是我們希望能夠?qū)崿F(xiàn)的內(nèi)容:
CarManager.execute("buyVehicle", "Ford Escort", "453543");
按照這個結(jié)構(gòu),我們現(xiàn)在應(yīng)該為CarManager.execute方法添加一個定義,如下所示:
CarManager.execute = function (name) { return CarManager[name] && CarManager[name].apply(CarManager, [].slice.call(arguments, 1)); };
因此我們最終的示例調(diào)用看起來是這樣的:
CarManager.execute("arrangeViewing", "Ferrari", "14523"); CarManager.execute("requestInfo", "Ford Mondeo", "54323"); CarManager.execute("requestInfo", "Ford Escort", "34232"); CarManager.execute("buyVehicle", "Ford Escort", "34232");
推薦讀物任何一本書都不是完美的,所以除了本書之外,如果讀者需要繼續(xù)深入了解JavaScript,我很樂意向您推薦以下書目。
其它本人的另外一本作品《JavaScript啟示錄》也將于9月份出版,敬請期待。
本文關(guān)鍵詞:JavaScript啟示錄,由筆耕文化傳播整理發(fā)布。
本文編號:186723
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/186723.html