工廠模式:用來實例化有共同接口的類,應用工廠模式能夠動態決定實例化哪個類spa
工廠模式的分類:code
一、簡單工廠模式(Simple Factory)blog
二、工廠方法模式(Factory Method)接口
*三、抽象工廠模式(Abstruct Factory)產品
(本文先介紹總結簡單工廠模式和工廠方法模式,抽象工廠模式比較複雜。。等我弄懂了再另開一篇文章來介紹總結)class
一、簡單工廠模式(Simple Factory):方法
又叫靜態工廠,主要是一個靜態方法,經過if語句來動態實現須要實現的類。咱們經過產品A,產品B的例子來講明:
im
1.首先爲全部的產品定義一個共同的產品接口總結
1 public interface Product{}
2.而後,咱們讓全部產品都實現這個接口static
1 public class ProductA implements Product{
2 public ProductA(){
3 System.out.println("ProductA被製造了");
4 }
5 }
6
7 public class ProductB implements Product{
8 public ProductB(){
9 System.out.println("ProductB被製造了");
10 }
11 }
3.最後,咱們寫一個工廠類來動態實現以上的產品類
1 public SimpleFactory{
2 public static Product create(String s){
3 if(s.equals("ProductA"))
4 return new ProductA();
5 else if(s.equals("ProductB"))
6 return new ProductB();
7 }
8 }
由此,咱們能夠看出,當用戶輸入不一樣的產品名時,工廠就會產生對應的產品。但實際上,簡單工廠模式有不少侷限性。好比說要添加新產品時,就須要再寫一段else if代碼進去,並且產品之間必需要同一級的,不能有複雜的層次關係,倘若產品數十分多,那往後維護起來是至關困難的。最致命的是,簡單工廠模式其實只是依賴SimpleFactory這一個類,若是這個類出了問題,工廠就不能工做。
這一致命性的缺點將在工廠方法模式中獲得解決。
二、工廠方法模式(Factory Method):
工廠方法爲工廠類定義了接口,用多態來削弱了工廠類的職能。
1.跟簡單工廠模式同樣,先定義產品類共同的接口:
1 public interface Product{}
2.爲工廠類定義共同接口:
1 public interface Factory{
2 public Product create();
3 }
3.讓全部產品實現產品接口:
1 public class ProductA implements Product{
2 public ProductA(){
3 System.out.println("ProductA被製造了");
4 }
5 }
6
7 public class ProductB implements Product{
8 public ProductB(){
9 System.out.println("ProductB被製造了");
10 }
11 }
4.接下來是工廠方法的核心部分,建立實現具體產品的具體工廠類
1 //建立ProductA的工廠
2 public class FactoryA implements Factory{
3 public Product create(){
4 return new ProductA();
5 }
6 }
7
8 //建立ProductB的工廠
9 public class FactoryB implements Factory{
10 public Product create(){
11 return new ProductB();
12 }
13 }
因而可知,工廠方法模式與簡單工廠模式的區別在於:工廠方法模式是一個工廠對應一個類,而不像簡單工廠模式那樣把生產產品的職能都放在同一個類裏邊,這樣的好處就是,若是其中一個類出了問題,其餘的類還能正常工做,相互之間不受影響。固然,工廠方法模式也有侷限的地方:當產品之間存在複雜的層次關係時,就須要構建多個工廠,這樣就產生了所謂的「類爆炸」,對於之後的維護來講也是至關不利的。要解決這個複雜的層次關係的問題,咱們能夠用最後一種工廠模式,即抽象工廠模式來解決,但因爲抽象工廠模式比較複雜,本人也不太會說明,因此我會另開一篇從別處轉載的文章來講明抽象工廠模式,對讀者形成不便請諒解!