最近在學習設計模式,因而仔細研究了一下,決定整理成文章分享出來,對於沒有設計模式的小白,再合適不過了,看招吧!javascript
盜個圖片~ ~ ~~java
我理解的設計模式,就是一種編程的風格和規範,這個概念最先是出如今建築學中,認爲設計風格是一種美學,那咱們就把設計模式,當成是編程的美學吧!編程
- 建立型設計模式
- 結構型設計模式
- 行爲型設計模式
- 技巧型設計模式
- 結構型設計模式
本小節主要講解---建立型設計模式 --- 持續更新設計模式
簡介:簡單工廠模式,又叫靜態工廠方法,由一個工廠對象決定建立某一種產品對象類的實例,主要用來建立同一類對象markdown
其實建立型設計模式,除了簡單工廠模式還有, 工廠方法模式,抽象工廠模式,建造者模式,原型模式,單例模式,後續會更新!!!學習
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該建立哪一個具體類的對象.經過使用工廠類,外界能夠從直接建立具體產品對象的尷尬局面擺脫出來,僅僅須要負責「消費」對象就能夠了。而沒必要管這些對象究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟件體系結構的優化。優化
因爲工廠類集中了全部實例的建立邏輯,違反了高內聚責任分配原則,將所有建立邏輯集中到了一個工廠類中;它所能建立的類只能是事先考慮到的,若是須要添加新的類,則就須要改變工廠類了。ui
當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不一樣條件建立不一樣實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一塊兒,很難避免模塊功能的蔓延,對系統的維護和擴展很是不利; 這些缺點在工廠方法模式中獲得了必定的克服。this
其實,我以爲,簡單工廠模式就是把全部的和某一種產品有關的類,對象,方法,整合到一塊兒,而後經過傳遞的不一樣參數,執行不一樣的邏輯spa
// 籃球類
let basketball = function(){
this.intro = '籃球類'
}
basketball.prototype ={
getMember:function(){
console.log('每一個球隊要五個隊員!')
// 其實主要是想表述籃球的邏輯,並非三種球都是重複的console
},
getBallSize:function(){
console.log('籃球很大')
}
}
// 足球類
let football = function(){
this.intro = '足球類'
}
basketball.prototype ={
getMember:function(){
console.log('每一個球隊要好幾個隊員!')
},
getBallSize:function(){
console.log('足球也很大')
}
}
// 網球類
let tennis = function(){
this.intro = '網球類'
}
basketball.prototype ={
getMember:function(){
console.log('每一個球隊要好幾個隊員!')
},
getBallSize:function(){
console.log('網球也很大')
}
}
// 如上圖,咱們建立了三個類,
// 可是,若是咱們想調用他們的時候,須要new出來一個個的實例,
// 而工廠模式,就是把上面全部相關的,整合到一塊兒,
// 這樣作的好處就是能夠經過傳遞的信息,建立出咱們須要的對象
let factory = function(name){
switch(name){
case 'basketball'
return new basketball()
case 'football'
return new football()
case 'tennis'
return new tennis()
}
}
// 調用
var foot = factory(basketball)
console.log(foot)
console.log(foot.getMember)
// 由於簡單工廠模式的核心就是建立對象,和整合相同代碼部分
// 代碼也能夠這樣寫
let factory = function(name){
let obj = new Object()
if(name == 'basketball'){
obj.intro = '籃球類'
obj.getMember = function(){
console.log('每一個球隊要五個隊員!') // 其實主要是想表述籃球的邏輯
}
obj.getBallSize=function(){
console.log('籃球很大')
}
}
if(name == 'football'){
obj.intro = '籃球類'
obj.getMember = function(){
console.log('每一個球隊要五個隊員!') // 其實主要是想表述足球的邏輯
}
obj.getBallSize=function(){
console.log('足球很大')
}
}
if(name == 'tennis'){
obj.intro = '網球'
obj.getMember = function(){
console.log('每一個球隊要五個隊員!') // 其實主要是想表述足球的邏輯
}
obj.getBallSize=function(){
console.log('網球很大')
}
}
return obj
}
複製代碼
上述主要講了兩種設計簡單工廠模式的方法,一種是經過類的實例化,一種是經過建立對象,而後返回。可是不管是簡單工廠模式、工廠模式仍是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留做接口,以達到最大程度上的複用。