天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁 > 論文百科 > 英文數(shù)據(jù)庫 >

js設(shè)計(jì)模式總結(jié)1

發(fā)布時(shí)間:2017-05-01 18:01

  本文關(guān)鍵詞:JavaScript設(shè)計(jì)模式,由筆耕文化傳播整理發(fā)布。


js設(shè)計(jì)模式有很多種,知道不代表會(huì)用,更不代表理解,為了更好的理解每個(gè)設(shè)計(jì)模式,對(duì)每個(gè)設(shè)計(jì)模式進(jìn)行總結(jié),以后只要看到總結(jié),就能知道該設(shè)計(jì)模式的作用,以及模式存在的優(yōu)缺點(diǎn),使用范圍。

本文主要參考張容銘著的《JavaScript設(shè)計(jì)模式》。

1、簡(jiǎn)單工廠模式

由一個(gè)工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例,主要用來創(chuàng)建同一類對(duì)象。

舉例子:1、比如不同的彈出框,有警告框,提示框,確認(rèn)框等。我們創(chuàng)建一個(gè)大類包含包含其共有的部分,比如顯示,內(nèi)容等,再根據(jù)創(chuàng)建是選擇的類型,再將差異部分添加進(jìn)去。

2、體育店里面有很多商品,及相關(guān)介紹,我們要買的時(shí)候,只要體育店有,就會(huì)得到相關(guān)產(chǎn)品和信息。先創(chuàng)建不同產(chǎn)品的基類,然后再用一個(gè)大類(也就是所謂的工廠)來包容這些基類。可用switch來選擇確定要?jiǎng)?chuàng)建什么。

總結(jié):第一種是通過創(chuàng)建一個(gè)新對(duì)象然后包裝增強(qiáng)其屬性和功能實(shí)現(xiàn)的。第二種是通過類的實(shí)例化實(shí)現(xiàn)的。前一種因?yàn)楣蚕砀割,所以父類的方法方法屬性是可以共用的,后者就不行了。?jiǎn)單工廠模式使用場(chǎng)合通常也限制在創(chuàng)建單一對(duì)象

2、工廠方法模式

工廠方法模式:通過對(duì)產(chǎn)品類的抽象使其創(chuàng)建業(yè)務(wù)主要負(fù)責(zé)用于創(chuàng)建多類產(chǎn)品的實(shí)例。將實(shí)際創(chuàng)對(duì)象工作推遲到子類中,這樣核心類就成了抽象類。

其中涉及到一個(gè)安全模式類:

var demo = function(){ if(!(this instanceof demo)){ return new demo(); } }

通過判斷this是不是實(shí)例來進(jìn)行實(shí)例化。這樣就可以避免漏掉new關(guān)鍵字。

var Factory=function(type,content){ if(this instanceof Factory){ var s=new this[type](content); }else{ return new Factory(type,content) } } Factory.prototype={ java:function(content){ //...... }, php:function(content){ //...... }, //...... }

在原型上添加不同類型的方法,然后在調(diào)用子類的時(shí)候?qū)嵗。如果采用?jiǎn)單工廠模式的話,用類實(shí)例化方法,但是這樣需要修改工廠方法和添加基類,也就是要修改兩個(gè)地方。而采用上面的方法,只需要在原型上添加方法就可以了。

避免了使用者和對(duì)象類之間的耦合,用戶不用關(guān)心創(chuàng)建該類的具體類,只需要調(diào)用工廠方法就可以。

3、抽象工廠模式

抽象類并不是用來創(chuàng)建具體的類,而是用來當(dāng)做父類來創(chuàng)建一些子類。創(chuàng)建的是一個(gè)類簇,它制定了類的結(jié)構(gòu)。其實(shí)就是先創(chuàng)建一個(gè)大類,然后在細(xì)分下,添加小類的實(shí)現(xiàn)方法,將小類的方法掛到小類的原型上。

4、建造者模式

將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,,同樣的構(gòu)建過程可采用不同的表示。

工廠模式主要是為了創(chuàng)建對(duì)象實(shí)例或者類簇(抽象工廠),關(guān)心的是最終產(chǎn)出(創(chuàng)建)的是什么。不關(guān)心創(chuàng)建的過程,僅僅需要?jiǎng)?chuàng)建的最終結(jié)果。所以工廠模式得到的是對(duì)象實(shí)例或者類簇。而建造者模式再創(chuàng)建對(duì)象的時(shí)候更為復(fù)雜,雖然其目的也是創(chuàng)建對(duì)象,但是其更多的是關(guān)心創(chuàng)建的整個(gè)過程,甚至于創(chuàng)建對(duì)象的每一個(gè)細(xì)節(jié),比如創(chuàng)建一個(gè)人,我們不僅要得到人的實(shí)例,還要關(guān)心穿什么衣服,男的女的,興趣愛好等等。

舉例子:創(chuàng)建一個(gè)求職者。我們先創(chuàng)建三個(gè)類,Human,Named,Work類。然后在建造者類中調(diào)用這三個(gè)類的組合,創(chuàng)建一個(gè)完整的應(yīng)聘者對(duì)象。

var Person=function(name,work){ var _person=new Human(); _person.name=new Named(name); _person.work=new Work(work); return _person; }

在建造者模式中將創(chuàng)建的對(duì)象類模塊化,這樣使得每個(gè)模塊都可以得到靈活的運(yùn)用與高質(zhì)量的復(fù)用。但是如果對(duì)象粒度很小,或者模塊間復(fù)用率很低且變動(dòng)不大,我們最好還是創(chuàng)建整體對(duì)象。

5、原型模式

用原型實(shí)例指向創(chuàng)建者對(duì)象的類,使用于創(chuàng)建新的對(duì)象的類共享原型對(duì)象的屬性以及方法。

原型拓展:就是在prototype上進(jìn)行拓展。

 

6、單例模式

只允許實(shí)例化對(duì)象一次。,有時(shí)我們也用一個(gè)對(duì)象來規(guī)劃一個(gè)命名空間,井井有條的管理對(duì)象上的屬性和方法。

var sing=(function(){ var instance=null; function Single(){} return function(){ if(!instance){ instance=Single; } return instance; } })();

 

7、外觀模式

//外觀模式:為一組復(fù)雜的子系統(tǒng)接口提供一個(gè)更高級(jí)的統(tǒng)一接口,通過這個(gè)接口使得對(duì)子系統(tǒng)接口的訪問更加容易。在JavaScript中,有時(shí)也會(huì)用于對(duì)底層結(jié)構(gòu)兼容性做統(tǒng)一封裝來簡(jiǎn)化用戶使用。 //實(shí)現(xiàn) function addEvent(dom,type,fn){ if(dom.addEventListener){ dom.addEventListener(type,fn,false); }else if(dom.attachEvent){ dom.attachEvent("on"+type,fn); }else{ dom["on"+type]=fn; } }

 

8、適配器模式

//適配器模式:將一個(gè)類(對(duì)象)的接口(方法或者屬性)轉(zhuǎn)化為另一個(gè)接口,以滿足用戶的需求,使類之間的接口的不兼容問題通過適配器得以解決。 //舉例子:其實(shí)就是為了兩個(gè)代碼庫所寫的代碼兼容運(yùn)行而書寫的額外代碼。這樣我們就不需要特意地重寫以前的功能代碼了。 //參數(shù)適配器:比如某個(gè)函數(shù)要傳入很多參數(shù) function dosomething(name,title,age,color,size,prize){}; dosomething(obj){}; dosomething(obj){ var _adapter={ name:"me", title:"設(shè)計(jì)", age:24, color:"pink", } }

 


  本文關(guān)鍵詞:JavaScript設(shè)計(jì)模式,由筆耕文化傳播整理發(fā)布。



本文編號(hào):339356

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/mishujinen/339356.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶eb735***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com