創建型設計模式-工廠模式
定義
通過對產品類的抽象使其創建業務主要負責用於創建多類產品的實例。(本質就是給這個工廠添加各種各樣需求功能的類作爲其屬性)
安全模式類
安全模式類是指可以屏蔽使用類時所導致的錯誤,一般我們創建對象時,均需要使用new 關鍵字去創建實例,當我們未使用,而是直接使用類名時,則會產生代碼異常,那麼這時候如果我們採用安全模式類,就可以毫無顧忌的使用類名來創建對象了。如:
function Person = function(name){
// 使用instanceof 判斷是否是同一個類
if(!(this instanceof Person)){
return new Demo();
}else{
this.name = name;
}
}
Person.prototype.sayHi = function(){
console.log(this.name,'is saying hello to you ')
}
// 讓我們來測試他們吧,不使用 new 關鍵字創建對象
let Anna = Person('Anna').sayHi();
//輸出打印: Anna is saying hello to you
// 正常創建對象方式
let Bob = new Person('Bob').sayHi();
//輸出打印: Bob is saying hello to you
工廠模式 案例
案例說明:假使需要製作一個廣告牌頁面,不同的廣告業主樣式,文字均不同。那麼我們使用剛剛的安全模式類創建一個工廠模式吧!
//安全模式創建工廠類
let ADBoardFactory = function(type,conent){
if(this instanceof ADBoardFactory){
return new this[type](content);
}else{
return new ADBoardFactory(type,content);
}
}
// 工廠原型中設置所創建所有類型的數據對象的基類
ADBoardFactory.prototype = {
Java:function(content){
//todo
},
PHP:function(content){
// todo
},
Javascript:function(content){
//todo
},
...
}
//如此,如果還有需求增加,只需要在工廠原型中設置添加便可。
//參考書籍中把這比喻爲名片,我認爲也很貼切,別人給你什麼名片,你存儲在你的錢包就可以,
//需要的時候直接拿出來用就Ok了
優勢
工廠模式避免了使用者與對象類之間的耦合。用戶不必關心創建該對象的具體類,只需要調用工廠方法即可。
參考書籍: 《JavaScript 設計模式》張容銘
同時大家也可參考這位讀者的觀後感
在看的同時記錄自己的想法與理解也是加深對這種模式的認識的一種方式。