小A:“什麼是簡單工廠模式?”
大B:“簡單工廠模式又叫靜態工廠模式,顧名思義,它是用來實例化目標類的靜態類。”
小A:“簡單工廠模式有什麼優點?”
大B:“現在我就主要通過一個簡單的實例說明簡單工廠及其優點。”
小A:“嗯。好。”
大B:“就如剛才我講過的,有個國家的運動員協會。”
下麵給出各個類的程序。
運動員.java
足球運動員.java
//跑啊跑
//跳啊跳
籃球運動員.java
體育協會.java
publicstatic運動員注冊足球運動員{
returnnew足球運動員;
publicstatic運動員注冊籃球運動員{
returnnew籃球運動員;
俱樂部.java
private運動員守門員;
private運動員後衛;
private運動員前鋒;
this前鋒=體育協會,注冊足球運動員;
this後衛=體育協會,注冊足球運動員;
this守門員=體育協會,注冊足球運動員;
守門員,跑;
後衛,跳;
大B:“這就是簡單工廠模式的一個簡單實例,你應該想象不用接口不用工廠而把具體類暴露給客戶端的那種混亂情形吧?就好像沒了體育總局,各個俱樂部在市場上自己胡亂的尋找仔細需要的運動員。簡單工廠就解決了這種混亂。我們用OCP看看簡單工廠,會發現如果要對係統進行擴展的話治需要增加實現產品接口的產品類(上例表現為‘足球運動員’,‘籃球運動員’類,比如要增加個‘乒乓球運動員’類),而無需對原有的產品類進行修改。”
小A:“這咋一看好像滿足OCP。”
大B:“但是實際上還是需要修改代碼的——對,就是修改工廠類。上例中如果增加‘乒乓球運動員’產品類,就必須相應的修改‘體育協會’工廠類,增加個‘注冊乒乓球運動員’方法。所以可以看出,簡單工廠模式是不滿足OCP的。”
小A:“那工廠方法模式哩?”
大B:“我們剛剛講了簡單工廠模式,下麵繼續談談工廠方法模式。剛才點明了簡單工廠模式最大的缺點——不完全滿足OCP。為了解決這一缺點,設計師們提出了工廠方法模式。工廠方法模式和簡單工廠模式最大的不同在於,簡單工廠模式隻有一個(對於一個項目或者一個獨立模塊而言)工廠類,而工廠方法模式有一組實現了相同接口的工廠類。下麵我們通過修改剛才的實例來介紹工廠方法模式。我們在不改變產品類(‘足球運動員’類和‘籃球運動員’類)的情況下,修改下工廠類的結構。”
相關代碼如下:
運動員.java
足球運動員.java
//跑啊跑
//跳啊跳
籃球運動員.java
體育協會.java
public運動員注冊;