有一次討論的時候,談到了這一點:到底什么時候我們需要把類封裝,並限制其必須使用工廠模式來創建實例。
一個理由是:當類的構造函數發生變化(名稱變化,參數變化等)時,我們只需要更改工廠類中的一個函數就可以了。而不必search所有的構造函數名稱並修改之。所以,一般情況下,我們最好都使用工廠模式封裝。
果然是這樣嗎?
不用工廠模式,當名稱變化時,確實需要search & replace。但是,難道一個模式被提練出來就是為了解決這個問題?!!似乎牛刀殺雞了吧
那當 參數變化 時呢?
函數的轉入參數都變了,還想不改動所有的代碼嗎?!!
先來看看定義
---------------------------
Factory Method是一種創建性模式,它定義了一個創建對象的接口,但是卻讓子類來決定具體實例化哪一個類.當一個類無法預料要創建哪種類的對象或是一個類需要由子類來指定創建的對象時我們就需要用到Factory
---------------------------
顯然上面的說法是不成立的。
如定義中說的,只有當無法預料所創建的實例時,才使用工廠模式。即:我們明確的計划不同條件下創建不同實例時,使用它。
經典的一個例子是:
日志記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶可以選擇記錄日志到什么地方。
另一個例子:
數據庫訪問類:訪問可能是SQLSERVER、ORACLE等,用記可以選擇創建訪問不同的數據庫。
