前言:半年前看高程的時候看到設計模式這章,云里霧里,不是看不明白,而是不明白為啥要如此麻煩只為創建一個對象。直到最近完成了自己第一個小項目,才體會到當代碼量多起來時沒有適當的規范與限制是多么大的災難。于是重新翻開高程,總結下幾種我學到的簡單設計模式的優劣。
正文:本文一共介紹7種設計模式以及他們的應用場景、優劣。
1.工廠模式
直接用函數來封裝對象,將對象作為返回值。
缺點:對象識別的問題,所有創建出的對象都是Object的實例,不好區分。
2.構造函數模式
優點:運用構造函數模式可以將實例標示為一種特定的類型。
缺點:創建的對象的方法都是私有的,如果只是想產生公用的方法,會造成不必要的性能浪費。
3.原型模式
利用原型鏈繼承
缺點:所有屬性和方法被實例共享。當屬性、方法中包含引用類型的值時,修改一個實例的屬性、方法會影響所有其他實例。
4.原型+構造函數模式
私有屬性、方法用構造函數產生,公有屬性、方法用原型來繼承。融合兩種方法的優點。
缺點:注意引用類型值的原型繼承。
ps:上圖代碼重寫了Person構造函數的原型對象,將原型對象指針指向了一個對象,所以constructor屬性此時指向Object而不是Person,所以要顯式的將其設置成Person。
5.動態原型模式
本質上還是構造函數,只在指定方法不存在時在原型對象中添加他。
缺點:不能使用對象字面量重寫原型對象。因為這會使實例的指針指向新的原型對象。也就是說上圖中原型對象中添加的sayName方法會失效。
6.寄生構造函數模式
調用時使用new操作符,除此以外我看不出和工廠模式有什么區別。望高人指點。
7.穩妥構造函數模式
沒有公共屬性,禁用this,僅暴露必須的API用于數據調用。適用于對安全有需求的領域。
如上代碼,只能通過sayName方法才能訪問到內部的name屬性。
本文給大家介紹了七種設計模式,分別介紹了他們的優缺點,希望對學習js設計模式相關知識有所幫助。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com