那麼,工廠模式是否合適?
我有一個問題(好吧,沒有真正的問題,但我想嘗試一些新的東西)與創建對象。其實我有一些訂單,其中包含一個訂購項目列表。
這些訂單項已在整個應用程序中使用,因此我需要一種方法來創建它們。主要的問題是,我希望能夠以許多不同的方式創建這些對象。
其實我在類的構造函數中執行此操作,並檢查給定的參數。 (我使用PHP,所以從你一定會知道:)語言沒有超載支持)
一個簡單而快速的例子
class foo {
protected $_data=null;
public function __contruct($bar){
if (is_array($bar)){
$this->_data=$bar;
}
else {
$dataFromDb=getDataFromDatabase
$this->_data=$dataFromDb;
}
}
}
無論如何,如果我想創建我的對象給出另一種類型的參數,可以說一個封裝在字符串中的xml文檔,我需要將所有這些東西放在我的構造函數中。 如果創建對象的過程更復雜,我最終需要爲每種類型創建一個單獨的方法,我想啓動。但是隻有在創建這種特殊類型時纔會調用此方法。 (我認爲你有問題:))
另一個問題想到,如果我需要在構造函數中創建具體對象的更多參數,我修改了所有我的代碼,導致構造器改變。 (好吧,我可以給他更多的參數並使用默認值,但這不是我真正想要的)。
所以我的問題是,哪種模式適合這個問題來解決我創建一個具體的對象。我想爲每一種我想要創建具體對象的方式創建一個工廠。但我不確定這是否是解決此類問題的常見解決方案。
哇,例如一個代碼是非常好的。花了我一段時間來理解它,但我會明確地使用它,如果它匹配我得到的任何問題。 但在具體的情況下,我認爲你的第二個例子是我想要這樣做的方式。 所以我創建了一個我當前的抽象基類,並在每個我想要創建對象的方式中執行分離類中的具體事情。 謝謝你,你的例子真的讓我很開心。 – evildead 2010-08-05 22:44:19
很高興幫助...請不要我改變構造函數一點...我很早就着急了:-) – prodigitalson 2010-08-05 23:25:23
我瞎了,什麼改變了? – evildead 2010-08-05 23:36:48