ChineseTax、ChineseBonusCalculator系統同時保留中美兩套實作,Calculator 透過條件判斷決定使用哪套。雖避免重寫,但切換仍需修改 Calculator 代碼。
定義 Tax、Bonus 介面,四個具體類別分別實作:
public interface Tax { double Calculate(); }
public interface Bonus { double Calculate(); }
public class ChineseTax : Tax { public double Calculate() => 4000 * 0.4; }
public class ChineseBonus : Bonus { public double Calculate() => 4000 * 0.1; }
public class AmericanTax : Tax { public double Calculate() => (4000 + 400) * 0.4; }
public class AmericanBonus : Bonus { public double Calculate() => 4000 * 0.1; }
public class Calculator
{
public static void Main(string[] args)
{
Bonus bonus = new ChineseBonus(); // 此處仍硬編碼
Tax tax = new ChineseTax(); // 切換國家需修改此處
double salary = 4000 + bonus.Calculate() - tax.Calculate();
Console.WriteLine("Chinese Salary is:" + salary);
}
}
引入 Factory 類別封裝物件建立,將具體類別名稱從客戶端移除,邁向抽象工廠模式完整形態。