這是針對面試的解答:
這是面試經常會被問到的設計模式,工程模式分為簡單工廠模式(****** factory 靜態工廠模式)、工廠方法模式(factory method)、抽象工廠模式(abstract factory)
其中後兩者屬於23種常用的設計模式。簡單工廠模式不屬於23種常用的設計模式。
首先讓我們來看下簡單工廠模式:
工廠模式就是來生成物件的
比如說乙個娃娃工廠就是生產娃娃物件的。
分為乙個產品介面(inte***ce product)
多個具體的產品實現類(productaimplements productproductbimplements product ......等等具體產品類)---concreteproduct
乙個工廠類(具體決定生產哪個產品,主要由裡面的方法根據傳入的引數來決定生產哪個產品)--creator(或者叫做factory)
首先來乙個product 介面
public inte***ce product
然後來幾個具體的產品類來實現product介面(你可以繼續來c,d等等產品,這個看到時候的具體需求)
public class producta implements product
}public class productb implements product
}
最後來乙個factory類來實現具體要生產什麼產品,根據傳入的引數來決定生產第幾種產品
public class factory else if(type == 2)else
return null;
}}
簡單工廠類是不是就這麼搞定了,是不是很簡單,連我這枚菜鳥都覺得so easy
讓我們來總結下簡單工廠類的優劣吧:
簡單工廠總的來說違反了開閉原則,在新增產品的話,你factory類就必須修改了。。。。oo原則之開閉原則:對修改關閉,對擴充套件開放。
然後下面是自己總結的工廠方法模式:
總的來說,工廠方法模式已經沒有違反閉合原則,針對介面程式設計
相比簡單工廠模式,工廠方法模式把工廠類也抽象了,成為了乙個抽象工廠類或者介面工廠,要生產哪種產品就實現那個那個產品的生產類(工廠類)
首先讓我們來看下
product 介面(或者可以是抽象類)
public inte***ce product
然後來兩個實現此介面的具體產品類
public class producta implements product
}public class productb implements product
}
然後再是抽象工廠(介面||抽象類)
public inte***ce factory
再來兩個與具體產品想對應的工廠生產類(一一對應,裡面有生產產品方法create)
public class factorya implements factory
@override
public product create()
}public class factoryb implements factory
@override
public product create()
}
到此為止簡單的工廠方法模式就實現了,我們來個test方法吧public class test
}輸出結果為:
i'm producta
i'm productb!
抽象工廠模式與工廠方法模式有點不太的地方就是他具有多個抽象產品,而工廠方法模式則只有乙個抽象產品(換一句話說,工廠方法模式只是極端情況下的抽象工廠模式——抽象產品只有一種的抽象工廠模式)
首先我們來兩個抽象產品(類或者介面) producta & productb
public inte***ce producta
public inte***ce productb
然後針對兩個產品分別來兩個具體產品類 producta1,a2 & productb1,b2具體實現producta,b抽象產品
public class producta1 implements producta
}public class producta2 implements producta
}public class productb1 implements productb
}public class productb2 implements productb
}
然後再來乙個抽象工廠factorypublic inte***ce factory
接著來兩個具體工廠factory1,2來實現factory
public class factory1 implements factory
@override
public productb getproductb()
}public class factory2 implements factory
@override
public productb getproductb()
}
這樣 乙個抽象工廠就大功告成了!
然後讓我們來test一下吧
public class test
}輸出為:
i'm producta1 !
i'm productb1 !
i'm producta2 !
i'm productb2 !
這樣工廠模式就結束了。面試應該也沒問題了。。。 java設計模式之工廠模式
工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某乙個類的例項,通常這一組類有乙個公共的抽象父類或者是介面並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義乙個父類或者介面,該類的子類通過不同的方法實現了父類中的方法。然後需要定義乙個工...
java設計模式之工廠模式
1 只要方法裡面控制產生物件的方法,就可稱為工廠相關方法。2 單例 多例。3 簡單工廠 例子 交通工具 多種交通工具 多種交通工具不同的生產過程 4 介面抽象類使用 一般乙個特性使用介面 會飛的 大概能定義為乙個物體使用抽象類 由於類的多繼承性,建議多用介面。5 抽象工廠 換掉一些列的產品,擴充套件...
java設計模式之工廠模式
工廠模式包括工廠方法模式和抽象工廠模式兩種。實際是將介面的例項建立交給乙個工廠類來做。1.工廠方法模式 又包括普通工廠模式 多方法工廠模式 靜態工廠模式三種設計方式。例如 介面 public inte ce father 實現類public class child1 implements fathe...