摘要:關(guān)于的設(shè)計(jì)模式,強(qiáng)力推薦這本書設(shè)計(jì)模式與開發(fā)實(shí)踐,來自騰訊的大牛所著。講解設(shè)計(jì)模式之前,我們先接觸一個(gè)重要的概念鴨子類型什么叫鴨子類型呢需求如果我們想聽鴨子的嘎嘎嘎叫聲情況如果有一只狗不是鴨子,它也能發(fā)出嘎嘎嘎的叫聲。
當(dāng)一個(gè)項(xiàng)目的代碼量比較多,或者多人開發(fā)的時(shí)候,就需要引入一些設(shè)計(jì)模式來讓我們更好的構(gòu)建項(xiàng)目。否則代碼就會變得亂糟糟,像一團(tuán)面條一樣了。
講解設(shè)計(jì)模式比較好的書有:
1、設(shè)計(jì)模式
2、Head First設(shè)計(jì)模式
不過以上兩本書主要是關(guān)于靜態(tài)語言、面向?qū)ο蟮木唧w實(shí)現(xiàn),因?yàn)殪o態(tài)面向?qū)ο笳Z言(比如C++ 和 Java)代碼寫法限制的是比較多的。不能給類動態(tài)的添加屬性、方法,函數(shù)的參數(shù)限制了類型等。
JS 雖然也是面向?qū)ο?,但是同時(shí)支持函數(shù)式編程,函數(shù)本身是一種值可以傳遞。JS的動態(tài)特性也不會限制變量類型。
所以Java 中的多態(tài)對JS 來說,那都不叫事。
對于 JS ,設(shè)計(jì)模式也應(yīng)該更加靈活,不應(yīng)該把靜態(tài)語言的設(shè)計(jì)模式生搬硬套到 JS 上,而應(yīng)該根據(jù)語言特性靈活應(yīng)用。
關(guān)于 JS 的設(shè)計(jì)模式,強(qiáng)力推薦這本書:JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐,來自騰訊的大牛所著。
講解設(shè)計(jì)模式之前,我們先接觸一個(gè)重要的概念 鴨子類型
什么叫鴨子類型呢?
需求:如果我們想聽鴨子的 嘎嘎嘎 叫聲 情況:如果有一只狗(不是鴨子),它也能發(fā)出 嘎嘎嘎 的叫聲。也就是說這條狗也能達(dá)到我們的目的,那這條狗就是可以用的。 思考:我們不再管這個(gè)對象到底是不是 instanceof Duck, 而是看它有沒有 嘎嘎嘎 叫的能力。就是說我們不再是面向?qū)ο?,而是面向接口。管它是什么類型,什么對象,只要?shí)現(xiàn)了 嘎嘎嘎 叫的這個(gè)接口,能達(dá)到我們的目的,就可以了。
舉個(gè)例子:
// aDiv 不是數(shù)組,而是 HTMLCollection 對象 var aDiv = document.getElementsByTagName("div"); // 但是由于 aDiv 也有 length 屬性,因此我們可以像數(shù)組一樣遍歷它 for (var i=0, len=aDiv.length; i接下來一個(gè)重要的概念是 封裝,把一個(gè)對象、方法或模塊的內(nèi)部實(shí)現(xiàn)隱藏起來,只暴露接口供外部使用。
JS 最常見的是用立即執(zhí)行函數(shù)封裝局部變量,局部函數(shù),暴露出部分函數(shù)或變量。// 對 ming 這個(gè)對象進(jìn)行了封裝,privateName 只能在立即執(zhí)行函數(shù)的內(nèi)部使用,外部獲取不到的。 var ming = (function() { // 乳名,外人不知道的 var privateName = "狗蛋"; // 學(xué)名 var publicName = "王小明"; var publicAge = 24; return { age: publicAge, getName: function() { return publicName; } }; }());JS 面向?qū)ο蟛捎玫氖窃涂寺》绞?,而不?Java 類和對象的模式。
因此 JS 生產(chǎn)對象的方式更像是 細(xì)胞分裂,Object.prototype 作為第一個(gè)細(xì)胞,然后分裂出 Function.prototype 、Array.prototype 、String.prototype 等,分裂出來的細(xì)胞可以添加自己的屬性和方法。而且 JS 是沒有 類 這個(gè)東東的。
Java 中的類像是一個(gè)模具,對象則是用這個(gè)模具印出來的,
第一篇文先說這么多,后續(xù)再把設(shè)計(jì)模式一一過一遍。最重要的是,推薦大家看看騰訊大牛的書。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/81066.html
摘要:而緩存就是為了解決用戶請求速度與釋放服務(wù)器壓力而生的。瀏覽器緩存則是另外的如個(gè)人見解。緩存的判斷規(guī)則過期機(jī)制過期機(jī)制就是瀏覽器根據(jù)緩存的有效期進(jìn)行判斷,如果在有效期內(nèi)就使用緩存,否則就拋棄這個(gè)緩存。否則會進(jìn)入其他緩存依據(jù)判斷。 [TOC] 簡介 用戶獲取網(wǎng)絡(luò)資源,需要通過非常長的網(wǎng)絡(luò)去服務(wù)器上請求資源,另外服務(wù)端為了應(yīng)對大量的用戶請求而不斷的提升硬件性能與帶寬。這對用戶與服務(wù)端都非常的...
摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式設(shè)計(jì)模式迭代器模式設(shè)計(jì)模式發(fā)布訂閱模式設(shè)計(jì)模式命令模式概念組合模式就是用小的子對象來構(gòu)建更大的對象,而這些小的子對象本身也許是由更小的孫對象構(gòu)成的。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》整理而來,其中會加入了一些自己的思考。希望對大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略...
摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會討論安全的類型檢測惰性載入函數(shù)凍結(jié)對象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...
摘要:簡介橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。同時(shí)橋接模式也有自己的缺點(diǎn)大量的類將導(dǎo)致開發(fā)成本的增加,同時(shí)在性能方面可能也會有所減少。 1. 簡介 橋接模式(Bridge)將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。其實(shí)就是函數(shù)的封裝,比如要對某個(gè)DOM元素添加color和backgroundColor,可以封裝個(gè)changeColor函數(shù),這樣可以在多個(gè)...
閱讀 770·2021-11-18 10:02
閱讀 2305·2021-11-15 18:13
閱讀 3318·2021-11-15 11:38
閱讀 3079·2021-09-22 15:55
閱讀 3746·2021-08-09 13:43
閱讀 2522·2021-07-25 14:19
閱讀 2523·2019-08-30 14:15
閱讀 3511·2019-08-30 14:15