昨天看了一下工廠模式,發現大部分概念都太官方,不想看,所以我今天自己用**來擼了一遍,如果有不對的地方,歡迎博友討論。**請註明出處!
文字不多,主要通過**來理解,概念請結合**去網上搜
場景:某汽車公司老闆讓你設計乙個汽車介面,介面用來開車駕駛,例如汽車有寶馬、奧迪、賓士....
首先抽象出car類
public inte***ce car
假如我們有寶馬和奧迪:
public class bwm implements car
@override
public void drive()
}
public class audi implements car
@override
public void drive()
}
抽象類和實體類都完成了,那麼就要進行工廠類設計
簡單工廠很簡單,就是定義乙個工廠factory用來生產汽車就可以了
public class ca***ctory else if ("audi".equals(carname)) else
}// 簡單工廠模式: 二
public static car produceaudi()
public static car producebwm()
}
對,就是這麼簡單,所以才叫簡單工廠,接下來測試一下:
public class test
}
奧迪
drive audi
寶馬drive bwm
工廠模式比簡單工廠模式來說,它對工廠也進行了抽象
car抽象、audi,bwm實體類不變
首先加乙個汽車抽象工廠(跟簡單工廠不一樣,這裡的工廠是乙個抽象介面,讓audi和bwm去實現這個抽象工廠)
public inte***ce carabstractfactory
public class bwmfactory implements carabstractfactory
}
public class audifactory implements carabstractfactory
}
測試一下:
public class test
}
奧迪
drive audi
寶馬drive bwm
為什麼要用工廠模式?工廠模式與簡單工廠模式相比有哪些優缺點? 這裡我從網上沒找到標準答案,我覺得看個人專案,都是可以用的。
抽象工廠其實用到的不多,這裡還是一位汽車為例,來講一下
假如:汽車型別是分為越野和轎車,那寶馬當然也分為越野寶馬和轎車寶馬,奧迪同理
老闆跟你說,我們要的介面是根據車型來生產,而不是簡單分為寶馬和奧迪了,這個時候,抽象工廠就派上用場了
抽象工廠有個產品族的概念,可以去網上搜一下,我的理解就是乙個產品中的一種特徵集合,例如汽車這個抽象中,又分為了越野汽車和普通轎車
同樣先定義個汽車抽象類
public abstract class car
public abstract class audi extends car
@override
public void drive()
}
public abstract class bwm extends car
@override
public void drive()
}
老闆不是說了要分為越野和轎車麼?
那麼就要很對奧迪和寶馬來分別定義兩種產品
public class audiyueye extends audi
}
public class audijiaoche extends audi
}
public class bwmyueye extends bwm
}
public class bwmjiaoche extends bwm
}
汽車抽象定義了,奧迪和寶馬也定義了,產品族也分了,那麼接下來就是把工廠實現了
別忘了,老闆給你說的是要能生產越野和轎車的工廠,那麼一定會有兩個工廠,乙個是用來生產越野車,乙個是用來生產轎車
但是無論這兩個工廠生產什麼型別,汽車型別是我們定義好的,也就是抽象到了工廠裡面的。
所以我們需要1個抽象工廠類和2個工廠實現:
public inte***ce carabstractfactory
public class yueyeca***ctory implements carabstractfactory
@override
public car createaudi()
}
public class jiaocheca***ctory implements carabstractfactory
@override
public car createaudi()
}
至此抽象工廠的**也擼完了
測試:
public class test
}
奧迪
drive audi
奧迪-越野車型
寶馬drive bwm
寶馬-轎車型別
二 設計模式 工廠模式
一.傳統時以pizza類舉例,乙個抽象類pizza,由幾個pizza實現類實現,主餐廳看看客戶點什麼便生產,但是如果需要增加新的pizza品種,則要增加乙個新的實現類,然後主餐廳裡增加對邏輯的判斷,顯然,違背了開放關閉原則。所以 工廠模式為解決某些需要生產大量一批類的問題 二.簡單工廠模式 定義了乙...
設計模式(二)工廠模式
與 模式不同,生產模式隱藏過程,只關注結果 簡單工廠,工廠方法,抽象工廠 一,簡單工廠模式 public inte ce car public class aodi implements car public class baoma implements car public class facto...
設計模式(二) 工廠模式
前言 我在面試的時候,有時候會問到候選人有沒有熟悉的設計模式,一般大部分候選人會選擇說熟悉單例和工廠 也有部分人會說熟悉觀察者 如果我進一步問候選人是如何應用工廠模式的,10個候選人有10個會舉連線sqlserver,oracle,mysql等不同資料庫時會用工廠模式產生不同的連線的例子。omg,我...