新書《JavaScript設計模式 》出版,感謝支持
2013-06-14 09:58 湯姆大叔 閱讀(14746) 評論(67) 收藏 舉報小記
這本書的出版得益于人民郵電出版社陳冀康編輯的推薦,加上之前博客又翻譯了一些原作者的文字,所以就承擔了該書的翻譯工作,不同于博客的是,由于設計模式本身就難以表達,加上英文版有很多錯誤(評價不佳),原本年初就可以出版的書,一直等到5月份原作者更新最完善版本以后,前后進行了5次譯稿校對,才得以出版,再次感謝作為專業翻譯媳婦的幫忙和編輯的耐心。
本書介紹
設計模式是解決軟件設計中常見問題的可復用方案。學習任何編程語言,設計模式都是一個令人興奮和極具吸引力的話題。
本書是JavaScript編程設計模式的學習指南。全書分為14章。首先介紹了什么是模式、模式的結構、類別、模式的分類、如何編寫模式等等;然后,集中介紹了很多流行的設計模式在JavaScript中的應用,包括Module(模塊)模式、Observer(觀察者)模式、Facade(外觀)模式和Mediator(中介者)模式;最后,還探討了模塊化的JavaScript模式、jQuery及其插件中的設計模式。
本書適合專業的Web開發人員和前端工程師閱讀。通過閱讀本書,他們將能夠提高對設計模式的認識,并學會如何將設計模式應用到JavaScript編程語言中。 購買鏈接,請查看右側的圖片。
章節示例
Command模式旨在將方法調用、請求或操作封裝到單一對象中,從而根據我們不同的請求對客戶進行參數化和傳遞可供執行的方法調用。此外,這種模式將調用操作的對象與知道如何實現該操作的對象解耦,并在交換出具體類(對象)方面提供更大的整體靈活性。
用基于類的編程語言解釋具體類是最恰當的,它們與抽象類的思想相關。一個抽象類定義一個接口,但不一定為它所有的成員函數提供實現。它作為一個基類,派生出其他類。實現缺失功能的派生類被稱為一個具體的類(見圖9-7)。

圖9-7 Command模式
Command模式背后的主要思想是:它為我們提供了一種分離職責的手段,這些職責包括從執行命令的任意地方發布命令以及將該職責轉而委托給不同對象。
實施明智的、簡單的命令對象將把action動作和調用該動作的對象綁定在一起。它們始終包括一個執行操作(如run()或execute())。所有具有相同接口的Command對象可以根據需要輕松交換,這被認為是該模式的一個更大好處。為了演示Command模式,我們將創建一個簡單的汽車購買服務。
(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 + " ) "; } }; })();
看一下上面的代碼,它可以通過直接訪問對象輕松地調用我們的CarManager方法。我們認為這里沒有任何錯誤,從技術上講,它是完全有效的JavaScript。然而,它在有些情況下可能是不利的。
例如,試想如果CarManager里的核心API改變了會怎么樣。這將要求程序里所有直接訪問這些方法的對象都需要進行修改。這可能被視為一個耦合層,它實際上最大程度地違反了松耦合對象的OOP方法論。而我們可以通過進一步抽象API來解決這個問題。
現在讓我們來擴展CarManager,這樣Command模式下的應用程序會產生如下結果:接受任意可以在CarManager對象上執行的命名方法,傳遞可以使用的任意數據,如CarModel(模型)和ID。這是我們希望能夠實現的內容:
CarManager.execute("buyVehicle", "Ford Escort", "453543");
按照這個結構,我們現在應該為CarManager.execute方法添加一個定義,如下所示:
CarManager.execute = function (name) { return CarManager[name] && CarManager[name].apply(CarManager, [].slice.call(arguments, 1)); };
因此我們最終的示例調用看起來是這樣的:
CarManager.execute("arrangeViewing", "Ferrari", "14523");
CarManager.execute("requestInfo", "Ford Mondeo", "54323");
CarManager.execute("requestInfo", "Ford Escort", "34232");
CarManager.execute("buyVehicle", "Ford Escort", "34232");
推薦讀物
任何一本書都不是完美的,所以除了本書之外,如果讀者需要繼續深入了解JavaScript,我很樂意向您推薦以下書目。
- 《JavaScript權威指南》,作者:David Flanagan
- 《JavaScript編程精解》,作者:Marijn Haverbeke 譯者(湯姆大叔)
- 《JavaScript模式》,作者:Stoyan Stefanov
- 《編寫可維護的JavaScript》 ,作者:Nicholas Zakas
- 《JavaScript語言精粹》,作者:Douglas Crockford
其它
本人的另外一本作品《JavaScript啟示錄》也將于9月份出版,敬請期待。
浙公網安備 33010602011771號