簡單工廠模式並不屬於gof 23個經典設計模式,但通常將它作為學習其他工廠模式的基礎,它的設計思想很簡單,其基本流程如下:
首先將需要建立的各種不同物件(例如各種不同的chart物件)的相關**封裝到不同的類中,這些類稱為具體產品類,而將它們公共的**進行抽象和提取後封裝在乙個抽象產品類中,每乙個具體產品類都是抽象產品類的子類;然後提供乙個工廠類用於建立各種產品,在工廠類中提供乙個建立產品的工廠方法,該方法可以根據所傳入的引數不同建立不同的具體產品物件;客戶端只需呼叫工廠類的工廠方法並傳入相應的引數即可得到乙個產品物件。
簡單工廠模式定義如下:
簡單工廠模式(****** factory pattern):定義乙個工廠類,它可以根據參
數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工
廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為
靜態工廠方法(static factory method)模式,它屬於類建立型模式。
簡單工廠模式的要點在於:當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。簡單工廠模式結構比較簡單,其核心是工廠類的設計,其結構如圖1所示:
在簡單工廠模式結構圖中包含如下幾個角色:
● factory(工廠角色):工廠角色即工廠類,它是簡單工廠模式的核心,負責實現建立所有產品例項的內部邏輯;工廠類可以被外界直接呼叫,建立所需的產品物件;在工廠類中提供了靜態的工廠方法factorymethod(),它的返回型別為抽象產品型別product。
● product(抽象產品角色):它是工廠類所建立的所有物件的父類,封裝了各種產品物件的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義乙個通用的工廠方法,因為所有建立的具體產品物件都是其子類物件。
● concreteproduct(具體產品角色):它是簡單工廠模式的建立目標,所有被建立的物件都充當這個角色的某個具體類的例項。每乙個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中宣告的抽象方法。
在簡單工廠模式中,客戶端通過工廠類來建立乙個產品類的例項,而無須直接使用new關鍵字來建立物件,它是工廠模式家族中最簡單的一員。
在使用簡單工廠模式時,首先需要對產品類進行重構,不能設計乙個包羅永珍的產品類,而需根據實際情況設計乙個產品層次結構,將所有產品類公共的**移至抽象產品類,並在抽象產品類中宣告一些抽象方法,以供不同的具體產品類來實現,典型的抽象產品類**如下所示:
abstract class product
//宣告抽象業務方法
public
abstract
void
methoddiff();
}
在具體產品類中實現了抽象產品類中宣告的抽象業務方法,不同的具體產品類可以提供不同的實現,典型的具體產品類**如下所示:
class
concreteproduct
extends
product
}
簡單工廠模式的核心是工廠類,在沒有工廠類之前,客戶端一般會使用new關鍵字來直接建立產品物件,而在引入工廠類之後,客戶端可以通過工廠類來建立產品,在簡單工廠模式中,工廠類提供了乙個靜態工廠方法供客戶端使用,根據所傳入的引數不同可以建立不同的產品物件,典型的工廠類**如下所示:
class factory
else
if (arg.equalsignorecase("b"))
return product;}}
在客戶端**中,我們通過呼叫工廠類的工廠方法即可得到產品物件,典型**如下所示:
class client
}
工廠三兄弟之簡單工廠模式(三)
為了將chart類的職責分離,同時將chart物件的建立和使用分離,sunny軟體公司開發人員決定使用簡單工廠模式對圖表庫進行重構,重構後的結構如圖2所示 在圖2中,chart介面充當抽象產品類,其子類histogramchart piechart和linechart充當具體產品類,chartfac...
工廠三兄弟之簡單工廠模式(三)
為了將chart 類的職責分離,同時將 chart 物件的建立和使用分離,sunny 軟體公司開發人員決定使用簡單工廠模式對圖表庫進行重構,重構後的結構如圖 2所示 圖2 圖表庫結構圖 在圖2中,chart介面充當抽象產品類,其子類histogramchart piechart和linechart充...
工廠三兄弟之簡單工廠模式(三)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!為了將chart類的職責分離,同時將chart物件的建立和使用分離,sunny軟體公司開發人員決定使用簡單工廠模式對圖表庫進行重構,重構後的結構如圖2所示 圖2 圖表庫結構圖 在圖2中,chart介面充當抽象產品類,其子類histogramchar...