摘要:即把構(gòu)造函數(shù)的原型指向某個(gè)實(shí)例,所有構(gòu)造函數(shù)的實(shí)例對(duì)象都共享原型中屬性和方法。
工廠方法模式
定義:通過(guò)對(duì)產(chǎn)品類的抽象使其創(chuàng)建業(yè)務(wù)主要用于創(chuàng)建多類實(shí)例
即:再構(gòu)造函數(shù)中創(chuàng)建指定類型的實(shí)例,原型屬性方法中定義創(chuàng)建過(guò)程
算法骨架:
var Factory = function(type, content) { if (this instanceof Factory) { return this[type](cotent) } else { return (new Factory([type](content))) } } Factory.prototype.type1 = function(content) { }
使用場(chǎng)景:需要?jiǎng)?chuàng)建大量對(duì)象,對(duì)象間可以分類合并(相似度高)
建造者模式定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與表示分離,同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
即:把存在變化的部分從大對(duì)象里抽出來(lái),在構(gòu)建過(guò)程中傳入?yún)?shù)控制變化。
算法骨架:
var Builder = function(arg1, args2...) { var entity = {}; entity.part1 = new Part1(arg1); entity.part2 = new Part2(args2); return entity } var Part1 = function(arg1) { switch (arg1) { case ... } }
使用場(chǎng)景:一個(gè)對(duì)象的某一部分易變就可通過(guò)建造者模式抽象出來(lái),這樣多帶帶維護(hù)易變部分。
原型模式定義:用原型實(shí)例指向創(chuàng)建對(duì)象的類,使用于創(chuàng)建新的對(duì)象的類共享原型實(shí)例的屬性和方法。
即:把構(gòu)造函數(shù)的原型指向某個(gè)實(shí)例,所有構(gòu)造函數(shù)的實(shí)例對(duì)象都共享原型中屬性和方法。
模式骨架1:
var ProConstructor = function(name) { // 原型對(duì)象對(duì)應(yīng)的構(gòu)造函數(shù) this.name = name } ProConstructor.prototype.walk = function() { // 原型對(duì)象中的方法 } var InsContructor = function(name) { // 對(duì)象實(shí)例對(duì)應(yīng)的構(gòu)造函數(shù) ProConstructor.call(this, name) // 構(gòu)造函數(shù)繼承, 復(fù)制一些屬性,這些屬性值每個(gè)對(duì)象不一樣 } InsContructor.prototype = new ProConstructor(); // 原型繼承, 將耗時(shí)長(zhǎng)、每個(gè)對(duì)象都又這個(gè)值的屬性和方法通過(guò)原型繼承
模式骨架2:
var ExtendPrototype = function(){ var F = function(){}, args = auguments, len = args.length; for (var i = 0; i使用場(chǎng)景:首先時(shí)一個(gè)對(duì)象需要被多次創(chuàng)建(創(chuàng)建一次的化原型模式?jīng)]有優(yōu)越感),然后就是每次創(chuàng)建的對(duì)象有差異(沒(méi)有差異的話用單例模式多好),從上面可以看出原型模式的比普通的創(chuàng)建的好處在于將可復(fù)用的、耗時(shí)的的邏輯放在構(gòu)造函數(shù)的原型里,而將簡(jiǎn)單差異化的放在構(gòu)造函數(shù)里,這樣不僅省去了創(chuàng)建的步驟而且原型對(duì)象在內(nèi)存中還被共享也就是省內(nèi)存,這樣就能創(chuàng)建很多相同或者相似的對(duì)象,而模式骨架2的特點(diǎn)在于對(duì)普通對(duì)象的繼承,比較常見(jiàn)
單例模式定義:是只允許實(shí)例化一次的對(duì)象類。
即:無(wú)論實(shí)例化多少次,都只產(chǎn)生唯一對(duì)象
模式骨架1:var jquery = { getDom: function(){} } // 通過(guò)引用類型賦值只是存儲(chǔ)引用的特點(diǎn) var jquery1 = jquery; var jquery2 = jquery; // jquery1 === jquery === jquery2模式骨架2:
var singleInstance = (function(){ var instance = null; // 單例對(duì)象對(duì)應(yīng)的構(gòu)造函數(shù) var SingleInstance = function() {}; return function(){ // instance通過(guò)特權(quán)方法訪問(wèn) if (!instance) { instance = new SingleInstance() } return instance } })() var instanceA = singleInstance(); var instanceB = singleInstance();使用場(chǎng)景:需要在多個(gè)環(huán)境、多次使用某個(gè)對(duì)象,模式1比較簡(jiǎn)單,可以作為聲明命名空間的方法,骨架2稍微復(fù)雜利用了閉包但是更符合面向?qū)ο蟮奶攸c(diǎn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/105512.html
摘要:都是構(gòu)造函數(shù)模式創(chuàng)建的原生構(gòu)造函數(shù)。使用構(gòu)造函數(shù)創(chuàng)建對(duì)象經(jīng)歷了以下四個(gè)過(guò)程創(chuàng)建一個(gè)新對(duì)象構(gòu)造函數(shù)的作用域交給新對(duì)象。 ??在創(chuàng)建對(duì)象的時(shí)候,使用對(duì)象字面量和 new Object() 構(gòu)造函數(shù)的方式創(chuàng)建一個(gè)對(duì)象是最簡(jiǎn)單最方便的方式。但是凡是處于初級(jí)階段的事物都會(huì)不可避免的存在一個(gè)問(wèn)題,沒(méi)有普適性,意思就是說(shuō)我要為世界上(程序中)的所有使用到的對(duì)象都使用一遍 var xxx = {} ,...
摘要:都是構(gòu)造函數(shù)模式創(chuàng)建的原生構(gòu)造函數(shù)。使用構(gòu)造函數(shù)創(chuàng)建對(duì)象經(jīng)歷了以下四個(gè)過(guò)程創(chuàng)建一個(gè)新對(duì)象構(gòu)造函數(shù)的作用域交給新對(duì)象。 ??在創(chuàng)建對(duì)象的時(shí)候,使用對(duì)象字面量和 new Object() 構(gòu)造函數(shù)的方式創(chuàng)建一個(gè)對(duì)象是最簡(jiǎn)單最方便的方式。但是凡是處于初級(jí)階段的事物都會(huì)不可避免的存在一個(gè)問(wèn)題,沒(méi)有普適性,意思就是說(shuō)我要為世界上(程序中)的所有使用到的對(duì)象都使用一遍 var xxx = {} ,...
摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱為模塊設(shè)計(jì)模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對(duì)象文字費(fèi)賠給變量。 JavaScript設(shè)計(jì)模式-第一部分:?jiǎn)卫J?、組合模式和外觀模式 設(shè)計(jì)模式是一些可靠的編程方式,有助于保證代碼更加易于維護(hù)、擴(kuò)展及分離,所有設(shè)計(jì)模式在創(chuàng)建大型JavaScript應(yīng)用程序時(shí)均不可或缺 單...
摘要:此時(shí)我們創(chuàng)建的對(duì)象內(nèi)保存靜態(tài)變量通過(guò)取值器訪問(wèn),最后將這個(gè)對(duì)象作為一個(gè)單例放在全局空間里面作為靜態(tài)變量單例對(duì)象供他人使用。 單例模式 又被稱為單體模式,是只允許實(shí)例化一次的對(duì)象類。有時(shí)我們也用一個(gè)對(duì)象來(lái)規(guī)劃一個(gè)命名空間,井井有條的管理對(duì)象上面的屬性和方法。 傳統(tǒng)的面向?qū)ο笳Z(yǔ)言中單例模式的實(shí)現(xiàn),均是單例對(duì)象從類中創(chuàng)建而來(lái),在以類為中心的語(yǔ)言中,這是很常見(jiàn)的做法。如果需要某個(gè)對(duì)象,就必須先...
摘要:橋接模式的核心在于將抽象部分和它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化??雌饋?lái)這個(gè)版本已經(jīng)很完美了不,它仍然有可以優(yōu)化的空間,即題目提到的橋接模式。使用橋接模式的實(shí)現(xiàn)版本這個(gè)實(shí)現(xiàn)包含了三個(gè)函數(shù)。這個(gè)例子體現(xiàn)了橋接模式的作用。 我寫的程序員面試系列文章 Java面試系列-webapp文件夾和WebContent文件夾的區(qū)別? 程序員面試系列:Spring MVC能響應(yīng)HTTP請(qǐng)求的原因?...
摘要:停更許久,近期計(jì)劃更新設(shè)計(jì)模式系列。單例模式是創(chuàng)建型設(shè)計(jì)模式的一種。雖然它不是正規(guī)的單例模式,但不可否認(rèn)確實(shí)具備類單例模式的特點(diǎn)。適用場(chǎng)景單例模式的特點(diǎn),意圖解決維護(hù)一個(gè)全局實(shí)例對(duì)象。 停更許久,近期計(jì)劃更新:設(shè)計(jì)模式系列。 showImg(https://segmentfault.com/img/bVbt7uw?w=800&h=600); 單例模式:限制類實(shí)例化次數(shù)只能一次,一個(gè)類只...
閱讀 3288·2021-09-08 09:45
閱讀 1251·2019-08-30 15:53
閱讀 1522·2019-08-30 14:12
閱讀 981·2019-08-29 17:01
閱讀 2568·2019-08-29 15:35
閱讀 394·2019-08-29 13:09
閱讀 1965·2019-08-29 12:32
閱讀 3083·2019-08-26 18:37