JavaScript設計模式(一)-- 簡單工廠模式

定義

簡單工廠模式:又叫靜態工廠方法,由一個工廠對象決定創建某一種產品對象類的實例。主要用來創建同一類對象。

如果類太多,就提供一個

對於多個類,在每次創建時還要找相對應的類。爲此,直接封裝在一個函數中。每次通過這個函數就可以創建我需要的對象爲我所用。而且其他人都不用關注創建這些對象到底依賴於哪個基類了。這個函數通常被稱爲工廠函數,這種模式叫簡單工廠模式

舉例

//basketball class
    var basketball = function(){
        this.intro = 'Basketball from America.';
    }
    basketball.prototype = {
        getMember: function(){
            console.log('Every team has five member');
        },
        getBallSize:function(){
            console.log('Basketball is not big');
        }
    }

    //football class
    var football = function(){
        this.intro = 'Football in the world.';
    }
    football.prototype = {
        getMember: function(){
            console.log('Every team has eleven member');
        },
        getBallSize:function(){
            console.log('Football is not big');
        }
    }

    //tennis class
    var tennis = function(){
        this.intro = 'Tennis in the world.';
    }
    tennis.prototype = {
        getMember: function(){
            console.log('Every team has one member');
        },
        getBallSize:function(){
            console.log('Tennis is very samll');
        }
    }

創建三個類,分別爲:basketball,football,tennis。寫一個簡單的工廠函數。

var SportsFactory = function(name){
        switch(name){
            case 'NBA':
                return new basketball();
            case 'worldCup':
                return new football();
            case 'FrenchOpen':
                return new tennis();
        }
    }

編寫函數調用

var Football = SportsFactory('worldCup');
    console.log(Football);
    console.log(Football.intro);
    Football.getMember();

一個對象也可以替代許多類

    總的來說,簡單模式工廠的理念就是創建對象,上面這種是創建相似對象,也可以用來對不同對象進行實例化。有點類似繼承中的寄生模式,但又不太一樣,因爲這裏沒有父類,無需做任何的繼承。只需要創建一個簡單對象,通過這個對象大量拓展方法和屬性,最終將對象返回出來。

    比如,書都有目錄,頁碼等。也有一些不同的地方:書名,出版時間,出版社等等。

function createBook(name,time,type){
    //創建一個簡單對象,通過這個對象大量拓展方法和屬性
    var e = new Object();
    e.name = name;
    e.time = time;
    e.type = type;
    e.getName = function(){
        console.log(this.name);
    }
    //return object
    return e;
}

var book1 = createBook('Javascript Book',2018,"js");
var book2 = createBook('CSS Book',2014,"css");

book1.getName();
book2.getName();

總結

第一種是通過實例化對象創建的,第二種是通過創建一個對象然後包裝增強其屬性和功能進行實現。他們之間的差異性造成前面通過類創建的對象,如果這些類繼承同一父類,那麼父類上的原型方法是可以進行共用的。後面寄生方式創建的對象都是一個新的個體,方法不能共用。

簡單工廠只適合於產品對象較少,且產品固定的需求,對於產品變化無常的需求來說顯然不合適;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章