為業務規則增加工廠方法
然而,上面增加的接口幾乎沒有解決任何問題,因為當系統的客戶在美國和中國企業間切換時Caculator代碼仍然需要修改。
只不過修改少了兩處,但是仍然需要修改ChineseBonus,ChineseTax部分。致命的問題是:我們需要將這個移植工作轉包給一個叫Hippo的軟件公司。由於版權問題,我們並未提供Softo系統的源碼給Hippo公司,因此Hippo公司根本無法修改Calculator,導致實際上移植工作無法進行。
為此,我們考慮增加一個工具類(命名為Factory),代碼如下:
1using System;
2
3namespace FactorySalary
4{
5 /**//// <summary>
6 /// Factory類
7 /// </summary>
8 public class Factory
9 {
10 public Tax CreateTax()
11 {
12 return new ChineseTax();
13 }
14
15 public Bonus CreateBonus()
16 {
17 return new ChineseBonus();
18 }
19 }
20}
21
修改後的客戶端代碼:
1
2using System;
3
4namespace FactorySalary
5{
6 /**//// <summary>
7 /// 客戶端程序調用
8 /// </summary>
9 public class Calculator
10 {
11 public static void Main(string[] args)
12 {
13 Bonus bonus = new Factory().CreateBonus();
14 double bonusValue = bonus.Calculate();
15
16 Tax tax = new Factory().CreateTax();
17 double taxValue = tax.Calculate();
18
19 double salary = 4000 + bonusValue - taxValue;
20
21 Console.WriteLine("Chinaese Salary is:" + salary);
22 Console.ReadLine();
23 }
24 }
25}
26