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