Javascript Patterns--读书笔记8 (Factory)
factory模式的目的是用來創建objects.它經常以類或者是一個類的靜態方法的形式出現,但是不論以何種形式的出現, 最終都得實現下面的目標:
- 當我們在設置一組對象的時候,它們需要執行一組相同的代碼的時候。
- 在編譯的時候,在不需要知道確切的類型(class)的時候,可以創建相應的對象
在傳統面向對象語言中,第2點尤為重要,當我們需要創建類的實例時,我們往往不能提前知道確切的實例類型,而在JS中我們可以很輕松的來實現。
以factory method或者是facotry class來創建對象的時候,都是通過繼承相同的parent object, 然后利用不同的subclasses來創建不同的對象。
來讓我們看一個實例:
- 一個共同的父類CarMaker
- 一個靜態方法factory(),它被用來創建car objects
- 一系列construcors, CarMaker.Compact, CarMaker.SUV, CarMaker.Convertible它們都繼承自CarMkaer. 它們全部被定義成CarMaker的靜態屬性
先看一下,如何來應用我們所創建的這一組工廠方法:
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');這是最常見的一種工廠模式的應用。我們來觀察一下代碼可以發現,我們傳遞給這個工廠方法一個字符串,用來指示我們希望得到的對象的類型,在運行的時候,我們就可以得到相應的對象。這里并沒有應用到new constructor()或者是object literals這種方式來產生一個新對象,而僅僅是用一個方法用接收到的字符串所表示的類型就可以做到。下面的代碼實現了上述代碼所應用的工廠方法:
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();//實現繼承 }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; };上述的代碼很簡單,我們只需要根據傳入factory方法的特定類型來尋找特定的構造函數,然后用來生成我們相對應的對象。繼承的方法driver只是來演示當我們對一組對象需要實現相同的code的時候,我們可以用工廠方法來替代,我們寫每一個構造函數來創建一個新對象。
轉載于:https://www.cnblogs.com/moonreplace/archive/2012/10/08/2715378.html
總結
以上是生活随笔為你收集整理的Javascript Patterns--读书笔记8 (Factory)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ipython和jupyter_IPyt
- 下一篇: 文本标点符号在前面怎么改_这三个标点符号