程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#設計模式之抽象工廠模式新解(5)

C#設計模式之抽象工廠模式新解(5)

編輯:關於C語言

整合成通用系統

讓我們回顧一下該系統的發展歷程:

最初,我們只考慮將Softo系統運行於中國企業。但隨著MaxDO公司業務向海外拓展, MaxDO需要將該系統移植給美國使用。

移植時,MaxDO不得不拋棄中國企業的業務規則類ChineseTax和ChineseBonus, 然後為美國企業新建兩個業務規則類: AmericanTax,AmericanBonus。最後修改了業務規則調用Calculator類。

結果我們發現:每當Softo系統移植的時候,就拋棄原來的類。現在,如果中國聯想集團要購買該系統,我們不得不再次拋棄AmericanTax,AmericanBonus,修改回原來的業務規則。

一個可以立即想到的做法就是在系統中保留所有業務規則模型,即保留中國和美國企業工資運算規則。

通過保留中國企業和美國企業的業務規則模型,如果該系統在美國企業和中國企業之間切換時,我們僅僅需要修改Caculator類即可。

讓移植工作更簡單

前面系統的整合問題在於:當系統在客戶在美國和中國企業間切換時仍然需要修改Caculator代碼。

一個維護性良好的系統應該遵循“開閉原則”。即:封閉對原來代碼的修改,開放對原來代碼的擴展(如類的繼承,接口的實現)

我們發現不論是中國企業還是美國企業,他們的業務運規則都采用同樣的計算接口。於是很自然地想到建立兩個業務接口類Tax,Bonus,然後讓AmericanTax、AmericanBonus和ChineseTax、ChineseBonus分別實現這兩個接口, 據此修正後的模型如下:

此時客戶端代碼如下:

1
2using System;
3
4namespace InterfaceSalary
5{
6 /**//// <summary>
7 /// 客戶端程序調用
8 /// </summary>
9 public class Calculator
10 {
11 public static void Main(string[] args)
12 {
13 Bonus bonus = new ChineseBonus();
14 double bonusValue = bonus.Calculate();
15
16 Tax tax = new ChineseTax();
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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved