1. 程式人生 > >(一)簡單工廠模式

(一)簡單工廠模式

pan 銷售 對象 ros sta 水果 which 經驗 string

(一)簡單工廠模式

作者:林子
時間:2014年8月
出處:http://blog.csdn.net/u013011841
聲明:歡迎指出錯誤


1、為什麽學習設計模式?

設計模式(Design pattern)是一套被重復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更easy被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的。設計模式使代碼編制真正project化。設計模式是軟件project的基石脈絡。如同大廈的結構一樣。

2、為什麽第一個學習簡單工廠?

簡單工廠(Simple Factory)是類的創建者,又叫靜態工廠方法(Static Factory Method)。簡單工廠是由一個工廠對象決定創建出納一種產品類的實例。

第一個學習簡單工廠是由於這是最主要的創建模式。學習好簡單工廠有利於我們學好工廠方法。

3、簡單工廠的引進

我們以農場公司為樣例,專門向市場銷售各類水果。在這個系統裏面須要描寫敘述下列水果

  • 葡萄Grape
  • 草莓Strawberry
  • 蘋果Apple

水果和其它的植物有非常大的不同。水果終於是能夠食用的。

那麽一個自然的做法就是就是建立一個各種水果都適用的接口,以便和農場裏的其它植物區分開來。

技術分享

水果的接口(interface)規定全部的水果必須實現的接口,包含不論什麽水果必須具備的方法。

PS: 不知道什麽是接口的去看Java教材,接口就是Fruit的抽象方法,類似C++的虛函數

水果接口的源碼:


Public interface Fruit
{
   //生長
   void grow();

   //收獲
   void harvest();

   //種植
   void plant();
}

描寫敘述蘋果類的類圖例如以下

技術分享


Apple類是水果類的一種,因此它實現了水果接口所聲明的全部方法。另外,因為蘋果是多年生的植物。因此多出一個treeAge性質,用來描寫敘述蘋果樹的年齡。


public class Apple implements Fruit
{
   private int treeAge;

   //生長
   public void grow()
   {
       log(“Apple if growing...”);
   }

   //收獲
   public void harvest()
   {
       log(“Apple has been harvest.”)
   }

   //種植
   public void plant()
   {
       log(“Apple has been planted.”)
   }

   //輔助方法
   public static log(String msg)
   {
       System.out.println(msg);
   }

   //樹齡取值方法
   public int getTreeAge()
   {
       return treeAge;
   }

   //樹齡的賦值方法
   public int setTreeAge(int treeAge)
   {
       this.treeAge=treeAge;
   }

}

葡萄和草莓類和蘋果類類似,這裏就不一一給出了。

農場的園丁(在這裏作為簡單工廠)也是系統的一部分。自然要由一個合適的類來代表。這個類就是FruitGardener類,其結構如圖所看到的


技術分享


FruitGardener會依據client的要求,創建出不同的水果對象,如蘋果(Apple).

園丁類的代碼例如以下


public class FruitGardener
{
//簡單工廠
   public static Fruit factory(String which)
   {
      if(which.equalsIgnoreCase(“Apple”))
      {
          return new Apple;
      }
      if(which.equalsIgnoreCase(“strawberry”))
      {
         return new strawberry;
      }

      if(which.equalsIgnoreCase(“grape”))
      {
        return new grape;
      } 

   }
}

4、簡單工廠的結構

簡單工廠涉及到工廠角色、抽象產品角色和詳細產品角色等三個角色:

  • 工廠類(Creator):擔任這個角色的是簡單工廠的核心,含有與應用緊密相關的邏輯。工廠類在調用下創建產品對象。
  • 抽象產品(Product):擔任這個角色的類是由簡單工廠所創建的對象的父類。或者他們擁有共同的接口。
  • 詳細產品(Concrete Product):簡單工廠所創建的不論什麽對象都是這個角色的實例。

技術分享

工廠類源碼


public class Creator
{
   //簡單工廠
   public static Product factory()
   {
       return new ConcreteProduct();
   }
}

抽象產品源碼


public interface Product 
{
}

詳細產品


public class ConcreteProduct implements Product
{
   public ConcreteProduct(){}
}



(一)簡單工廠模式