摘要:抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創(chuàng)建多個產品族中的產品對象。前邊的兩個都是直接生產實例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產工廠,其實抽象工廠其實是實現(xiàn)子類繼承父類的方法。
創(chuàng)建型模式
創(chuàng)建型模式是對一個類的實例化過程進行了抽象,把對象的創(chuàng)建和對象的使用進行了分離
上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,為什么把這兩個放在一起說,因為我個人認為他們兩個是有關聯(lián)的,簡單工廠模式被我看作是工廠模式的簡潔版,然后工廠模式被我看作是抽象工廠模式的簡潔版
簡單工廠定義:簡單工廠模式中,可以根據參數(shù)的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創(chuàng)建其他類的實例,被創(chuàng)建的實例通常都具有共同的父類。
比如你去專門賣鼠標的地方你可以買各種各樣的鼠標
最通俗的理解就是封裝,簡單帶過一下
function mouse(color,long){ var o = new Object(); o.color= color; o.long= long; o.Explain= function(){ console.log(this.color,this.long); } return o; } var mouseA = mouse("黑色",3);工廠模式
定義:工廠方法模式中,工廠父類負責定義創(chuàng)建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類。
比如去旁邊還有個專門賣鍵盤的和耳機的然后他和賣鼠標的組成了一個門店
你要進如這個門店然后買鼠標或者鍵盤或者耳機
你可以把這個工廠模式理解成是 進化版的簡單工廠模式
shop= function(val) { if(typeof this === "object") { //看看有沒有new 沒有new的話new一個 var s = new this[val](); return s; } else { return new shop(val); } } shop.prototype = { mouse: function() { console.log("買了個鼠標") }, keyboard: function() { console.log("買了個鍵盤") }, headset: function() { console.log("買了個耳機") } } bigShop = new shop(); mouse = new bigshop.mouse();抽象工廠模式
定義:抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創(chuàng)建多個產品族中的產品對象。
前邊的兩個都是直接生產實例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產工廠,其實抽象工廠其實是實現(xiàn)子類繼承父類的方法。
說白了 抽象工廠模式 我認為就是工廠功能模式的擴充版,簡單工廠生產實例 ,工廠功能模式生產實例的接口,抽象工廠呢生產的是工廠
比如說上邊他們有了個電腦店的門店 現(xiàn)在電腦店火了 又開了一個電腦店 然后這兩個電腦店一個是聯(lián)想的 一個是戴爾的
核心代碼 let agency = function(subType, superType) { //判斷抽象工廠中是否有該抽象類 if(typeof agency[superType] === "function") { function F() {}; //繼承父類屬性和方法 F.prototype = new agency[superType] (); //將子類的constructor指向子類 subType.constructor = subType; //子類原型繼承父類 subType.prototype = new F(); } else { throw new Error("抽象類不存在!") } }
這是創(chuàng)建工廠的類 好比專賣店 //鼠標抽象類 agency.mouseShop = function() { this.type = "鼠標"; } agency.mouseShop.prototype = { getName: function() { return new Error("抽象方法不能調用"); } } //鍵盤抽象類 agency.KeyboardShop = function() { this.type = "鍵盤"; } agency.KeyboardShop.prototype = { getName: function() { return new Error("抽象方法不能調用"); } }
//普通鼠標子類 function mouse(name) { this.name = name; this.item = ["買我,我線長","玩游戲賊溜"] } //抽象工廠實現(xiàn)鼠標類的繼承 agency(mouse, "mouseShop"); //子類中重寫抽象方法 mouse.prototype.getName = function() { return this.name; } //普通鍵盤子類 function Keyboard(name) { this.name = name; this.item = ["行,你買它吧","沒鍵盤看你咋玩"] } //抽象工廠實現(xiàn)鍵盤類的繼承 agency(Keyboard, "KeyboardShop"); //子類中重寫抽象方法 Keyboard.prototype.getName = function() { return this.name; }
最后放一下全部代碼
let agency = function(subType, superType) { //判斷抽象工廠中是否有該抽象類 if(typeof agency[superType] === "function") { function F() {}; //繼承父類屬性和方法 F.prototype = new agency[superType] (); //將子類的constructor指向子類 subType.constructor = subType; //子類原型繼承父類 subType.prototype = new F(); } else { throw new Error("抽象類不存在!") } } //鼠標抽象類 agency.mouseShop = function() { this.type = "鼠標"; } agency.mouseShop.prototype = { getName: function() { return new Error("抽象方法不能調用"); } } //鍵盤抽象類 agency.KeyboardShop = function() { this.type = "鍵盤"; } agency.KeyboardShop.prototype = { getName: function() { return new Error("抽象方法不能調用"); } } //普通鼠標子類 function mouse(name) { this.name = name; this.item = ["買我,我線長","玩游戲賊溜"] } //抽象工廠實現(xiàn)鼠標類的繼承 agency(mouse, "mouseShop"); //子類中重寫抽象方法 mouse.prototype.getName = function() { return this.name; } //普通鍵盤子類 function Keyboard(name) { this.name = name; this.item = ["行,你買它吧","沒鍵盤看你咋玩"] } //抽象工廠實現(xiàn)鍵盤類的繼承 agency(Keyboard, "KeyboardShop"); //子類中重寫抽象方法 Keyboard.prototype.getName = function() { return this.name; } //實例化鼠標 let mouseA = new mouse("聯(lián)想"); console.log(mouseA.getName(), mouseA.type); //聯(lián)想 鼠標 let mouseB = new mouse("戴爾"); console.log(mouseB.getName(), mouseB.type); //戴爾 鼠標 //實例化鍵盤 let KeyboardA = new Keyboard("聯(lián)想"); console.log(KeyboardA.getName(), KeyboardA.type); //聯(lián)想 鍵盤 let KeyboardB = new Keyboard("戴爾"); console.log(KeyboardB.getName(), KeyboardB.type); //戴爾 鍵盤
我覺得這個抽象工廠的話 相對前兩種而言 組合比較靈活
抽象工廠不直接創(chuàng)建實例,個人認為在大型項目的話應該蠻實用的。
以上是個人的見解,接觸不多,有說的不對或不足之處,請批評指正。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/105562.html
摘要:簡單工廠模式簡單工廠模式又叫靜態(tài)工廠模式,由一個工廠對象決定創(chuàng)建某一種產品對象類的實例。工廠方法模式工廠方法模式的本意是將實際創(chuàng)建對象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創(chuàng)建對象的一種最常用的設計模式。我們不暴露創(chuàng)建對象的具體邏輯,而是將將邏輯封裝在一個函數(shù)中,那么這個函數(shù)就可以被視為一個工廠。工廠模式根據抽象程度的不...
摘要:簡單工廠模式簡單工廠模式又叫靜態(tài)工廠模式,由一個工廠對象決定創(chuàng)建某一種產品對象類的實例。工廠方法模式工廠方法模式的本意是將實際創(chuàng)建對象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創(chuàng)建對象的一種最常用的設計模式。我們不暴露創(chuàng)建對象的具體邏輯,而是將將邏輯封裝在一個函數(shù)中,那么這個函數(shù)就可以被視為一個工廠。工廠模式根據抽象程度的不...
摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的...
閱讀 2757·2023-04-25 15:15
閱讀 1388·2021-11-25 09:43
閱讀 1659·2021-11-23 09:51
閱讀 1160·2021-11-12 10:36
閱讀 2948·2021-11-11 16:55
閱讀 1023·2021-11-08 13:18
閱讀 799·2021-10-28 09:31
閱讀 2112·2019-08-30 15:47