Javascript Patterns--读书笔记8 (Factory)
factory模式的目的是用來創(chuàng)建objects.它經(jīng)常以類或者是一個類的靜態(tài)方法的形式出現(xiàn),但是不論以何種形式的出現(xiàn), 最終都得實現(xiàn)下面的目標(biāo):
- 當(dāng)我們在設(shè)置一組對象的時候,它們需要執(zhí)行一組相同的代碼的時候。
- 在編譯的時候,在不需要知道確切的類型(class)的時候,可以創(chuàng)建相應(yīng)的對象
在傳統(tǒng)面向?qū)ο笳Z言中,第2點尤為重要,當(dāng)我們需要創(chuàng)建類的實例時,我們往往不能提前知道確切的實例類型,而在JS中我們可以很輕松的來實現(xiàn)。
以factory method或者是facotry class來創(chuàng)建對象的時候,都是通過繼承相同的parent object, 然后利用不同的subclasses來創(chuàng)建不同的對象。
來讓我們看一個實例:
- 一個共同的父類CarMaker
- 一個靜態(tài)方法factory(),它被用來創(chuàng)建car objects
- 一系列construcors, CarMaker.Compact, CarMaker.SUV, CarMaker.Convertible它們都繼承自CarMkaer. 它們?nèi)勘欢x成CarMaker的靜態(tài)屬性
先看一下,如何來應(yīng)用我們所創(chuàng)建的這一組工廠方法:
View Code var corolla = CarMaker.factory('Compact'); var solstice = CarMaker.factory('Convertible'); var cherokee = CarMaker.factory('SUV');conrolla.drive();//"Vroom, I have 4 doors" solstice.drive();//"Vroom, I have 2 doors" cherokee.drive();//Vroom, I have 17 doors讓我們來分析一下代碼:
var corolla = CarMaker.factory('Compact');這是最常見的一種工廠模式的應(yīng)用。我們來觀察一下代碼可以發(fā)現(xiàn),我們傳遞給這個工廠方法一個字符串,用來指示我們希望得到的對象的類型,在運行的時候,我們就可以得到相應(yīng)的對象。這里并沒有應(yīng)用到new constructor()或者是object literals這種方式來產(chǎn)生一個新對象,而僅僅是用一個方法用接收到的字符串所表示的類型就可以做到。下面的代碼實現(xiàn)了上述代碼所應(yīng)用的工廠方法:
View Code //parent constrructor function CarMaker() {}//a method of the parent CarMaker.prototype.drive = function() {return "Vroom, I have "+ this.doors +" doors"; }//the static factory mehtod CarMaker.factory = function( type ) {var constr = type,newcar;//error if the constructor doesn't existif( typeof CarMaker[constr] !== "function" ){throw {name: "Error",message: constr + " doesn't exist"}}//下面的代碼只繼承一次父對象//CarMaker.Compact === CarMaker['Compact']訪問對象屬性的兩種不同方式if (typeof CarMaker[constr].protoype.drive !== 'function'){CarMaker[constr].protoype = new CarMaker();//實現(xiàn)繼承 }newcar = new CarMaker[constr]();return newcar; }//定義我們所需要的car CarMaker.Compact = function() {this.doors = 4; };CarMaker.Convertible = function() {this.doors = 2; };CarMaker.SUV = function () {this.doors = 17; };上述的代碼很簡單,我們只需要根據(jù)傳入factory方法的特定類型來尋找特定的構(gòu)造函數(shù),然后用來生成我們相對應(yīng)的對象。繼承的方法driver只是來演示當(dāng)我們對一組對象需要實現(xiàn)相同的code的時候,我們可以用工廠方法來替代,我們寫每一個構(gòu)造函數(shù)來創(chuàng)建一個新對象。
轉(zhuǎn)載于:https://www.cnblogs.com/moonreplace/archive/2012/10/08/2715378.html
總結(jié)
以上是生活随笔為你收集整理的Javascript Patterns--读书笔记8 (Factory)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ipython和jupyter_IPyt
- 下一篇: Java基础之Calendar应用:每周