單工廠的缺點(diǎn)是:當(dāng)添加一個新的產(chǎn)品時需要修改工廠類乎完,這樣就違背了開閉原則。工廠模式就是為了解決這一缺陷而出現(xiàn)的屈留,解決的方法是把創(chuàng)建具體實(shí)例的任務(wù)放在了工廠的子類中兼砖,工廠只提供了創(chuàng)建實(shí)例的的接口。
abstract class Factory
{
public abstract Car CreateCar(int number);
}
class 大眾Factory : Factory
{
public override Car CreateCar(int number)
{
return new 大眾(number);
}
}
class 寶馬Factry : Factory
{
public override Car CreateCar(int number)
{
return new 寶馬(number);
}
}
abstract class Car
{
public int number;
public Car(int n)
{
number = n;
}
public abstract void Msg();
}
class 大眾 : Car
{
public 大眾(int number) : base(number) { }
public override void Msg()
{
Console.WriteLine(number + " 一汽大眾磅氨!");
}
}
class 寶馬 : Car
{
public 寶馬(int number) : base(number) { }
public override void Msg()
{
Console.WriteLine(number + " 華晨寶馬尺栖!");
}
}
工廠模式的優(yōu)點(diǎn):
工廠模式有效地解決了添加新產(chǎn)品必須要修改工廠類代碼的問題,符合設(shè)計(jì)原則中的開閉原則悍赢。
工廠模式的缺點(diǎn):
工廠模式的本質(zhì)是將具體實(shí)例的創(chuàng)建工作放在了具體子類工廠中進(jìn)行决瞳,這造成一個新的問題:將選擇實(shí)例類型的任務(wù)交給了客戶端货徙,如我們想生產(chǎn)一個大眾左权,就必須在客戶端new一個大眾工廠。如果new了100個大眾工廠痴颊,這時要換到寶馬怎么辦赏迟?只能把大眾Factory一個一個地替換成寶馬Factory。所以簡單工廠和工廠模式都不是完美的蠢棱,我們應(yīng)該根據(jù)具體的情況來選擇锌杀。