天天看點

Design Pattern: Abstract Factory 模式

假設您要制作一個對話方塊(dialog)元件,您希望的是這個對話方塊可以有不同的視感(look-and- feel),最基本的想法是,藉由setter将不同視感的元件設定給這個對話方塊,例如:

customdialog.java

很簡單,這是最基本的介面依賴,setter依賴于ibutton與itextfield兩個介面,而不是其實作類别,不過這邊還有個進一步的要求,使用 上面的方式還必須親自呼叫setter、layout等方法,您希望視感的更換可以更簡單些,例如隻要透一個元件的替換就可以完成對話方塊上所有元件的視 感更換。 

您可以使用abstract factory模式,将所有對話方塊所需要的産生的元件加以封裝,對話方塊依賴于abstract factory,實際上具體的factory實作則分别産生對話方塊所需要的視感元件

現在如果要更換所有的視感元件,就隻要抽象掉具體的factory就可以了,例如:

customdialog windowsdialog = 

      new customdialog(new windowswidgetfactory()); 

windowsdialog.showdialog(); 

customdialog macdialog = 

      new customdialog(new macwidgetfactory()); 

macdialog.showdialog();

來将上面的uml圖具體實作出來。

ibutton.java

itextfield.java

iwidgetfactory.java

macbutton.java

windowsbutton.java

mactextfield.java

windowstextfield.java

macwidgetfactory.java

windowswidgetfactory.java

簡單的說,在abstract factory模式中将具體的product封裝在具體factory實作中,而客戶仍隻要面對factory與product的抽象介面,避免依賴于具 體的factory與product,由于factory封裝了所必須的product,是以要更換掉所有的元件,隻要簡單的抽換掉factory就可以 了,不用修改用戶端的程式。

繼續閱讀