定義
簡單工廠模式:又叫靜態工廠方法,由一個工廠對象決定創建某一種產品對象類的實例。主要用來創建同一類對象。
如果類太多,就提供一個
對於多個類,在每次創建時還要找相對應的類。爲此,直接封裝在一個函數中。每次通過這個函數就可以創建我需要的對象爲我所用。而且其他人都不用關注創建這些對象到底依賴於哪個基類了。這個函數通常被稱爲工廠函數,這種模式叫簡單工廠模式。
舉例
//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();
總結
第一種是通過實例化對象創建的,第二種是通過創建一個對象然後包裝增強其屬性和功能進行實現。他們之間的差異性造成前面通過類創建的對象,如果這些類繼承同一父類,那麼父類上的原型方法是可以進行共用的。後面寄生方式創建的對象都是一個新的個體,方法不能共用。
簡單工廠只適合於產品對象較少,且產品固定的需求,對於產品變化無常的需求來說顯然不合適;