簡單工廠模式
什么是簡單工廠模式
就是建立一個工廠類,對實(shí)現(xiàn)了同一接口的一些類進(jìn)行實(shí)例的創(chuàng)建。簡單工廠模式的實(shí)質(zhì)是由一個工廠類根據(jù)傳入的參數(shù)或渤,動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類(這些產(chǎn)品類繼承自一個父類或接口)的實(shí)例罢维。
簡單工廠模式的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):工廠類是整個模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象.通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對象就可以了。而不必管這些對象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利空闲,有利于整個軟件體系結(jié)構(gòu)的優(yōu)化令杈。
缺點(diǎn):由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則碴倾,將全部創(chuàng)建邏輯集中到了一個工廠類中逗噩;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類跌榔,則就需要改變工廠類了异雁。當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時候,可能會出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求.這種對條件的判斷和對具體產(chǎn)品類型的判斷交錯在一起僧须,很難避免模塊功能的蔓延纲刀,對系統(tǒng)的維護(hù)和擴(kuò)展非常不利;
案例
?? public interface Human {
? ? ?? public void say();
?? }
?? public class Man implements Human {
? ? ?? @Override
? ? ?? public void say() {
? ? ? ? ?? System.out.println("男人");
? ? ?? }
?? }
?? public class Woman implements Human {
? ? ?? @Override
? ? ?? public void say() {
? ? ? ? ?? System.out.println("女人");
? ? ?? }
?? }
?? public class SampleFactory {
? ? ?? public static Human makeHuman(String type){
? ? ? ? ?? if(type.equals("man")){
? ? ? ? ? ? ?? Human man = new Man();
? ? ? ? ? ? ?? return man;
? ? ? ? ?? }else if(type.equals("womman")){
? ? ? ? ? ? ?? Human woman = new Woman();
? ? ? ? ? ? ?? return woman;
? ? ? ? ?? }else{
? ? ? ? ? ? ?? System.out.println("不存在");
? ? ? ? ? ? ?? return null;
? ? ? ? ?? } ? ? ? ? ? ?
? ? ?? }
?? }
?? public class Client {
? ? ?? public static void main(String[] args) {
? ? ? ? ?? Human man = SampleFactory.makeHuman("man");
? ? ? ? ?? man.say();
? ? ? ? ?? Human womman = SampleFactory.makeHuman("womman");
? ? ? ? ?? womman.say();
? ? ?? }
?? }