摘要:設(shè)計(jì)模式共有種,我今天先來了解一下工廠模式,其他的模式將會(huì)在后續(xù)的博客中陸續(xù)為大家講解。工廠模式主要分為簡(jiǎn)單工廠模式和抽象工廠模式。抽象工廠模式抽象工廠模式與簡(jiǎn)單工廠函數(shù)不同的是,抽象工廠函數(shù)會(huì)先設(shè)計(jì)好接口,具體的實(shí)現(xiàn)在子類中進(jìn)行。
設(shè)計(jì)模式
設(shè)計(jì)模式(design pattern)概念:
是一套反復(fù)使用、思想成熟、經(jīng)過分類和無數(shù)實(shí)戰(zhàn)設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。是為了代碼可重用、可擴(kuò)展、可解耦、更容易被人理解和保證代碼可靠性。
設(shè)計(jì)模式共有23種,我今天先來了解一下工廠模式(Factory Pattern),其他的模式將會(huì)在后續(xù)的博客中陸續(xù)為大家講解。
工廠模式工廠模式,正像它的名字一樣,可以像工廠一樣生產(chǎn)出我們想要的東西,只要我們提供原料。在我們?nèi)粘>帉懘a過程中,很可能,我們不知不覺中就已經(jīng)使用過工廠模式。我們看一個(gè)簡(jiǎn)單的例子:
//工廠模式很基礎(chǔ)的的一個(gè)例子 function createPerson (name,age) { var person = new Object(); person.name = name; person.age = age; return person; } var Holz = createPerson ("Holz", "21"); console.log(Holz); /* { age: "21", name: "Holz" } */ var Tom = createPerson ("Tom", "7"); console.log(Tom); /* { age: "7", name: "Tom" } */
在這個(gè)函數(shù)中,我可以通過傳入不同的參數(shù),創(chuàng)建具有不同參數(shù)值得對(duì)象??梢钥吹?,工廠模式其實(shí)很簡(jiǎn)單。
工廠模式(Factory Pattern)主要分為簡(jiǎn)單工廠模式和抽象工廠模式。簡(jiǎn)單工廠模式
簡(jiǎn)單工廠(Simple Factory Pattern)模式主要用于創(chuàng)建同一類的對(duì)象,比如我們創(chuàng)建需要一個(gè)身份,老師或者學(xué)生??梢酝ㄟ^下面這個(gè)函數(shù):
//簡(jiǎn)單工廠模式。 var simpleCreatePerson = function (type, person) { return this[type](person); } simpleCreatePerson.prototype = { student: function (person) { var Astudent = new Object(); Astudent.name = person.name; Astudent.age = person.age; return Astudent; }, teacher: function (person) { var Ateacher = new Object(); Ateacher.name = person.name; Ateacher.age = person.age; return Ateacher; } } var teacher = new simpleCreatePerson("teacher", {name:"鄭老師", age:25 }); var student = new simpleCreatePerson("student", {name:"鄭同學(xué)", age:21 }); console.log(teacher); /* this is a teacher {name:"鄭老師", age: 25} */ console.log(student); /* this is a teacher {name:"鄭同學(xué)", age: 25} */
我們可以傳入不同的 type 比如"student"或“teacher”去創(chuàng)建不同的對(duì)象,然后再通過不同的person對(duì)象去給里面的屬性賦值。無論是"student"或者"teacher"都是person,所以說簡(jiǎn)單工廠函數(shù)就是用來創(chuàng)建同一類對(duì)象的不同實(shí)例。
上面的代碼通過原型_prototype_去添加兩個(gè)函數(shù),(關(guān)于原型的知識(shí),不是一兩句可以講完的,如果不懂得話,大家可以到網(wǎng)上去搜索相關(guān)的資料進(jìn)行了解)然后通過this[type]去選擇不同的方法,如果這里不明白的話我可以解釋一下,this是一個(gè)對(duì)象,指向當(dāng)前函數(shù)(在JavaScript里函數(shù)是對(duì)象),然后this[屬性名/方法名] 去調(diào)用內(nèi)部的屬性或方法,那么this[type] (person)就是調(diào)用對(duì)應(yīng)的方法去實(shí)例化一個(gè)具體的類(student或teacher)。通過this[type] (person)去調(diào)用。
這就是簡(jiǎn)單工廠函數(shù)。
抽象工廠模式 :與簡(jiǎn)單工廠函數(shù)不同的是,抽象工廠函數(shù)會(huì)先設(shè)計(jì)好接口,具體的實(shí)現(xiàn)在子類中進(jìn)行。這樣看概念有點(diǎn)模糊,我們來看一個(gè)例子:
我們定義一個(gè)父類,abstractCreatePerson也就是創(chuàng)建一個(gè)人,然后這個(gè)人有一個(gè)自我介紹的方法方法selfIntroduction,那么不同的人就有不同的介紹內(nèi)容,這個(gè)時(shí)候我們就可以用到抽象工廠模式:
var abstractCreatePerson = function () {}; abstractCreatePerson.prototype = { selfIntroduction: function () { throw new Error("請(qǐng)先實(shí)例化此方法!"); } } var student = Object.create(abstractCreatePerson.prototype); student.selfIntroduction = function () { console.log("I am a sutdent, my name is holz!"); } student.selfIntroduction(); /* I am a sutdent, my name is holz! */ var teacher = Object.create(abstractCreatePerson.prototype); teacher.selfIntroduction = function () { console.log("I am a teacher, my name is xxxx!"); } teacher.selfIntroduction(); /* I am a teacher, my name is xxxx! */
可以看到這段代碼,父類 abstractCreatePerson 中先聲明了一個(gè)方法,然后通過 Object.create() 方法去繼承這個(gè)父類,(因?yàn)檫@樣不會(huì)覆蓋原有的原型鏈),然后我們?cè)僭谧宇愔腥?shí)例化方法,不同的子類就有了不同的實(shí)例方法。
這就是工廠模式,他提高了我們代碼的可重用性,降低了模塊之間的耦合度。
工廠模式,正像它的名字一樣,可以像工廠一樣生產(chǎn)出我們想要的東西,只要我們提供原料
工廠模式提高了我們代碼的可重用性,降低了模塊之間的耦合度
工廠模式主要用于創(chuàng)建同一類的對(duì)象的不同實(shí)例
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/90337.html
摘要:本回內(nèi)容介紹上一回聊到單例模式,做了一道題,內(nèi)容不多,比較容易理解。這里其實(shí)還可以進(jìn)一步優(yōu)化,達(dá)到高聚類低耦合,這里工廠模式就告一段落了。 本回內(nèi)容介紹 上一回聊到JS單例模式(singleton),做了一道題,內(nèi)容不多,比較容易理解。介一回嘞,聊聊工廠模式,之前聊到過工廠模式,這回聊深入點(diǎn)兒,可能會(huì)比較抽象,不過好在實(shí)際開發(fā)中使用還算廣泛,理解起來會(huì)比較容易,開始咯: 1. 簡(jiǎn)單工廠...
摘要:注意事項(xiàng)聲明函數(shù)時(shí)候處理業(yè)務(wù)邏輯區(qū)分和單例的區(qū)別,配合單例實(shí)現(xiàn)初始化構(gòu)造函數(shù)大寫字母開頭推薦注意的成本。簡(jiǎn)單工廠模式使用一個(gè)類通常為單體來生成實(shí)例。 @(書籍閱讀)[JavaScript, 設(shè)計(jì)模式] 常見設(shè)計(jì)模式 一直對(duì)設(shè)計(jì)模式不太懂,花了一下午加一晚上的時(shí)間,好好的看了看各種設(shè)計(jì)模式,并總結(jié)了一下。 設(shè)計(jì)模式簡(jiǎn)介 設(shè)計(jì)模式概念解讀 設(shè)計(jì)模式的發(fā)展與在JavaScript中的應(yīng)用 ...
摘要:簡(jiǎn)單工廠模式創(chuàng)建單一的對(duì)象示例描述工廠模式主要是為了創(chuàng)建對(duì)象實(shí)例或者類簇抽象工廠關(guān)心的是最終產(chǎn)出創(chuàng)建的對(duì)象而不關(guān)心創(chuàng)建的過程在出現(xiàn)多個(gè)類的時(shí)候每次創(chuàng)建需要找到對(duì)應(yīng)的類往往比較麻煩這時(shí)候通常使用一個(gè)函數(shù)進(jìn)行封裝來創(chuàng)建所需要的對(duì)象這樣就無需關(guān)注 簡(jiǎn)單工廠模式(創(chuàng)建單一的對(duì)象) 示例1 描述 工廠模式主要是為了創(chuàng)建對(duì)象實(shí)例或者類簇(抽象工廠), 關(guān)心的是最終產(chǎn)出(創(chuàng)建)的對(duì)象, 而不關(guān)心創(chuàng)建...
摘要:設(shè)計(jì)模式工廠模式最近閱讀了幾本設(shè)計(jì)模式方面的書籍學(xué)習(xí)之余整理下來方便以后的歸納和梳理設(shè)計(jì)模式工廠模式創(chuàng)造工廠模式是一種創(chuàng)建性模式也就是一種創(chuàng)建對(duì)象的最佳實(shí)踐首先我們需要理解為什么我們需要工廠模式想象一個(gè)場(chǎng)景如果你要求去買一些東西板燒雞腿 Javascript設(shè)計(jì)模式-工廠模式 最近閱讀了幾本設(shè)計(jì)模式方面的書籍,學(xué)習(xí)之余整理下來,方便以后的歸納和梳理 設(shè)計(jì)模式-工廠模式 創(chuàng)造工廠模式是一...
摘要:簡(jiǎn)單工廠模式又叫靜態(tài)工廠方法模式,由一個(gè)工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例。主要用來創(chuàng)建同一類對(duì)象。場(chǎng)景一比如體育商店賣體育器材,里面有很多體育用品,及相關(guān)介紹,當(dāng)我們想買一個(gè)籃球及相關(guān)介紹時(shí),只需要溫售貨員,他會(huì)幫你找到所有的東西。 簡(jiǎn)單工廠模式又叫靜態(tài)工廠方法模式,由一個(gè)工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例。主要用來創(chuàng)建同一類對(duì)象。場(chǎng)景一:比如體育商店賣體育器材,里面有很多體...
閱讀 2481·2021-11-19 09:40
閱讀 3680·2021-10-12 10:12
閱讀 1944·2021-09-22 15:04
閱讀 2963·2021-09-02 09:53
閱讀 853·2019-08-29 11:03
閱讀 1179·2019-08-28 18:11
閱讀 1785·2019-08-23 15:28
閱讀 3649·2019-08-23 15:05