設計模式是程式設計師進階的必經之路,真正地理解、掌握設計模式對編寫高質量程式碼是極有幫助的。所以想從之前的筆記、工作中碰到的場景及反思、一些書籍的參考、和網上查到的用例,梳理一下自己對設計模式的理解,整理成一系列文章。
設計模式
- 設計模式的本質是利用多型、封裝、等技術,提煉出一些可以重複使用的設計技巧,或者說套路。
- 當然,不同語言中,運用的技術是不一樣的,在js中,用的比較多的是多型、閉包、高階函式等技術。
- 設計模式注重可複用性和可維護性,而不注重程式碼量和邏輯複雜度。
- 深刻理解了模式的意圖之後,再結合專案的實際場景進行使用,誤用會適得其反。
動態語言的好處
- js是動態語言,動態語言對變數型別的寬容給實際編碼帶來了很大的靈活性;
- 靜態語言中,實現“面向介面程式設計”不容易,因為在型別檢查的強制要求下,必須通過抽象類或者介面進行向上轉型,才能體現出多型的價值;
- 而在js中,向上轉型不存在的,任何物件都可以替換使用,實現多型簡直輕而易舉,具體見下文;
多型
- 多型的概念:同一個操作作用於不同的物件上,可以產生不同的解釋和不同的執行結果。
- 在JavaScript這種型別模糊的語言中,物件多型性是天生的,一個變數既可以指向一個類, 又可以隨時指向另外一個類。
- 多型的核心思想:’做什麼‘和’怎麼做、誰去做‘分離開來,也是’不變的事情‘和’有可能變的事情‘分離開來;
var makeSound = function( animal ){
animal.sound();
};
var Duck = function(){}
Duck.prototype.sound = function(){
console.log( `嘎嘎嘎` );
};
var Chicken = function(){}
Chicken.prototype.sound = function(){
console.log( `咯咯咯` );
};
makeSound( new Duck() ); // 嘎嘎嘎
makeSound( new Chicken() ); // 咯咯咯
程式碼參考自《設計模式與開發實踐》