雖引入 Tax、Bonus 介面,但客戶端 Calculator 仍需 `new ChineseBonus()`、`new ChineseTax()`。切換至美企時仍需修改客戶端代碼,且若源碼不提供給移植廠商,移植無法進行。
新增 Factory 工具類,集中管理具體類別的實例化:
public class Factory
{
public Tax CreateTax() => new ChineseTax();
public Bonus CreateBonus() => new ChineseBonus();
}
public class Calculator
{
public static void Main(string[] args)
{
Bonus bonus = new Factory().CreateBonus();
double bonusValue = bonus.Calculate();
Tax tax = new Factory().CreateTax();
double taxValue = tax.Calculate();
double salary = 4000 + bonusValue - taxValue;
Console.WriteLine("Chinese Salary is:" + salary);
Console.ReadLine();
}
}
Factory 類別Factory 本身仍硬編碼具體類別,移植仍需修改源碼將 Factory 拆分為 ChineseFactory、AmericanFactory 等具體工廠,再引入抽象工廠統一管理,配合組態檔實現零代碼修改切換——這就是下一集的重點。