工廠模式帶來的對象兩個主要的事情表:廠的說法,並傳遞給它的參數來初始化它創建
- 拆離從類確切的實現細節客戶端代碼。
- 集中創建代碼,所以如果創建邏輯發生變化,它只會在工廠中更改,而不是可能的20個文件。
但是如果我想傳遞特定的參數給構造函數來正確初始化它呢?這將來自應用程序的用戶或當前狀態。這不會打敗第二點嗎?
class AnimalFactory
{
public:
createAnimal(type, string nickName)
{
if (type == 0)
return new Dog(nickName);
else if(type == 1)
return new Cat(nickName);
}
}
以上是我如何在實施例中看到的,但是以下同樣好的工廠,甚至更優選的,因爲其更具有可讀性和傳遞少一個參數?
class AnimalFactory
{
public:
createDog(string nickName)
{
return new Dog(nickName);
}
createCat(string nickName)
{
return new Cat(nickName);
}
}
嗯,這是我不明白的理由。如果我必須創建新的'Elephant'類型,我將不得不創建一個新的'類型',它將被傳遞到工廠以創建它,所以代碼會發生變化!?如果這還不夠,想象一下大象,我需要傳遞它的「牧羣名稱」,這也需要更改代碼。這就是爲什麼我不能充分認識到這個工廠的優勢。 – zar
這是工廠界面的簽名改變。這使得工廠的一些客戶不必要地受到影響,因爲他們從不想創造大象。對於「受影響」,我的意思是重新編譯和重新部署,而不是客戶端的源代碼更改。的確,這些代碼不會改變:) – Kata