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
不錯,我們解決了一個大問題,設想一下:當該系統從中國企業移植到美國企業時,我們現在需要做什么?
答案是: 對于Caculator類我們什么也不用做。我們需要做的是修改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 AmericanTax();
13 }
14
15 public Bonus CreateBonus()
16 {
17 return new AmericanBonus();
18 }
19 }
20}
21
為系統增加抽象工廠方法
很顯然,前面的解決方案帶來了一個副作用:就是系統不但增加了新的類Factory,而且當系統移植時,移植工作僅僅是轉移到Factory類上,工作量并沒有任何縮減,而且還是要修改系統的源碼。 從Factory類在系統移植時修改的內容我們可以看出: 實際上它是專屬于美國企業或者中國企業的。名稱上應該叫AmericanFactory,ChineseFactory更合適。
文章來源于領測軟件測試網 http://www.kjueaiud.com/