當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
工厂模式——JavaScript
生活随笔
收集整理的這篇文章主要介紹了
工厂模式——JavaScript
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我理解的設計模式是為了提高代碼復用,增強擴展性的代碼編寫理念,所以無關乎編程語言。JavaSript是我感興趣的語言,所以使用它來實現。
?
- 簡單工廠(Sample Factory)
又叫靜態工廠,用于創建同一類對象。如彈出框分為警告、確認和對話框,它們公共的方法提取出來,不同之處分別處理。
1 function createPop(type,text){ 2 var o = new object(); 3 o.content = text; 4 o.show = function(){ 5 //todo 6 }; 7 8 if(type == 'alert'){ 9 //todo 10 } else if(type == 'conform'){ 11 //todo 12 } else if(type == 'prompt'){ 13 //todo 14 } 15 }創建一個Alert:var nameAlert = new createPop('alert','請輸入姓名!');
- 工廠方法(Factory Method)
工廠方法是將創建對象的方法推遲到子類中。如一個工廠方法可以生產幾種食品類。
?
1 var FoodFactory = function(type,count){ 2 if(this instanceof FoodFactory){ 3 return new this[type](count); 4 } 5 } 6 7 FoodFactory.prototype = { 8 Pie: function(count){ 9 //todo 10 }, 11 Pizza: function(count){ 12 //todo 13 }, 14 Cake: function(count){ 15 //todo 16 } 17 }?
- ?抽象工廠(Abstract Factory)
抽象類顯示定義一些功能,但沒有具體實現。子類繼承了抽象類還需要實現各個虛方法。就是在其他面向對象語言里的多態,創建子類賦值給父類,好處是調用方式都是一樣的,運行時會自動選擇子類對應的方法。
如一個汽車的公司有多個品牌,它只負責設計汽車有什么功能,但真正的生產給子公司實現。
1 var VehicleFactory = function(subType,superType){ 2 if(typeof VehicleFactory[superType] === 'function'){ 3 fucntion F(){}; //緩存類 4 F.prototype = new VehicleFactory[super](); 5 subType.constructor = subType; 6 subType.prototype = new F(); 7 } else { 8 throw new Error('未創建該抽象類'); 9 } 10 } 11 12 //抽象類 13 VehicleFactory.Car = function(){ 14 this.type = 'Car'; 15 }; 16 17 VehicleFactory.Car.prototype = { 18 getPrice:function(){ 19 return new Error('抽象方法不能調用'); 20 }, 21 // ... 22 } 23 24 //抽象類 25 VehicleFactory.Truck= function(){ 26 this.type = 'Truck'; 27 }; 28 29 VehicleFactory.Truck.prototype = { 30 getPrice:function(){ 31 return new Error('抽象方法不能調用'); 32 }, 33 // ... 34 } 35 36 //寶馬子類 37 var BMW = function(price,speed){ 38 this.price = price; 39 this.speed = speed; 40 }; 41 VehicleFactory(BMW,'Car'); //寶馬繼承了抽象父類Car,有了一些抽象方法,但是不能使用 42 BMW.prototype.getPrice = function(){ 43 return this.price; 44 } 45 46 //使用 47 var z4 = new BMW(50000); 48 console.log(z4.type); //Car 繼承父類Car的屬性 49 console.log(z4.getPrice()); //50000 繼承父類Car的抽象方法,自己重新實現抽象工廠做了什么?我們需要一個新的子類時,使用抽象工廠讓子類繼承對應的一個抽象類,得到一些屬性和虛方法,子類再實現這些虛方法,就可以使用了。
?
參考:
張容銘《JavaScript設計模式》
?
轉載于:https://www.cnblogs.com/feitan/p/5238137.html
總結
以上是生活随笔為你收集整理的工厂模式——JavaScript的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaScript DOM 编程艺术
- 下一篇: CodeForces 361B Levk