結構
參與者
- Product:定義工廠方法所創建的接口
- ConcreteProduct:實現Product接口
- Creator:
聲明工廠方法,該方法返回一個Product類型的對象。Creator也可以定義一個工廠方法的缺省實現,它返回一個缺省的ConcreteProduct對象
可以調用工廠方法以創建一個Product對象。
- ConcreteCreator:重定義工廠方法以返回一個ConcreteProduct實例
協作
Creator依賴於它的子類來定義工廠方法,所以它返回一個適當的ConcreteProduct實例
意圖
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。Factory Method使一個類的實例化延遲到其子類。
別名
虛構造器(Virtual Constructor)
動機
可擴展的製作作坊,現在是生長奶油,以後可能生產牛奶
適用性
- 當一個類不知道它所必須創建的對象的類的時候
- 當一個類希望它的子類來制定它所創建的對象的時候
- 當類將創建對象的指責委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一信息局部化的時候
相關模式
- Abstract Factory經常用工廠方法來實現。
- 工廠方法通常在Template Methods(模板)中被調用
- Prototypes不需要創建Creator的子類,但是,他們通常要求一個針對Product類的Initialize操作。Creator使用Initialize來初始化對象。而Factory Method不需要這樣的操作。