設計模式之工廠設計模式(一:簡單工廠模式與工廠方法模式)

工廠模式:用來實例化有共同接口的類,應用工廠模式能夠動態決定實例化哪個類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 }

  因而可知,工廠方法模式與簡單工廠模式的區別在於:工廠方法模式是一個工廠對應一個類,而不像簡單工廠模式那樣把生產產品的職能都放在同一個類裏邊,這樣的好處就是,若是其中一個類出了問題,其餘的類還能正常工做,相互之間不受影響。固然,工廠方法模式也有侷限的地方:當產品之間存在複雜的層次關係時,就須要構建多個工廠,這樣就產生了所謂的「類爆炸」,對於之後的維護來講也是至關不利的。要解決這個複雜的層次關係的問題,咱們能夠用最後一種工廠模式,即抽象工廠模式來解決,但因爲抽象工廠模式比較複雜,本人也不太會說明,因此我會另開一篇從別處轉載的文章來講明抽象工廠模式,對讀者形成不便請諒解!

相關文章
相關標籤/搜索