2011年11月19日 星期六

Design Pattern 比對(2) Factory Method和 Abstract Factory的異同

Factory Method Pattern(工廠方法模式),與Abstract Factory Pattern抽象工廠,其實都是在做同一件事,


就是要把建構子(constructor )封裝起來,使人不能隨意的去使用、修改。   這個與Singleton其實都是在做相同的事情,


因此,這三個也很常被使用在一起。  或是任兩個合併使用。


 


最簡單的區分方法:我先列個簡單的小表 (但我其實覺得這個分法很不好…有興趣的人真的去抓一下兩邊的UML圖去看一下比較好


 












Factory Method 
Abstract Factory

以class來達成loose coupling的目的
以object來達成loose coupling的目的

主要精神:inheritance(繼承)
主要精神:composition(合成)

當利用Factory Method來建立物件時,需要繼承一個
class,並且override掉原本的Factory Method 

利用Abstract Factory的時候:重點是需要先定義一個
concrete Factory(具象化的工廠) 


目的:只是讓使用者不再需要每次修改原始的class
可以將各種產品利用composition集合起來

 
缺點:每一次要加入新產品:都必需要改變interface,甚至
需要將所有的工廠重新實作一次以適應新的interface 


建立一項商品:
建立一整個商品家族

在java中Factory會看到的字:abstract
在java中factory會看到的字:interface