配置文件:
1<?xml version="1.0" encoding="utf-8" ?>
2<configuration>
3 <appSettings>
4 <add key="factoryName" value="AmericanFactory"></add>
5 </appSettings>
6</configuration>
7
采用上面的解決方案,當系統在美國企業和中國企業之間切換時,我們需要做什么移植工作?
答案是: 我們僅僅需要修改配置文件,將factoryName的值改為American。
修改配置文件的工作很簡單,只要寫一篇幅配置文檔說明書提供給移植該系統的團隊(比如Hippo公司) 就可以方便地切換使該系統運行在美國或中國企業。
最后的修正(不是最終方案)
前面的解決方案幾乎很完美,但是還有一點瑕疵,瑕疵雖小,但可能是致命的。
考慮一下,現在日本NEC公司決定購買該系統,NEC公司的工資的運算規則遵守的是日本的法律。如果采用上面的系統構架,這個移植我們要做哪些工作呢?
1.增加新的業務規則類JapaneseTax,JapaneseBonus分別實現Tax和Bonus接口。
2.修改AbstractFactory的getInstance方法,增加else if(factoryName.equals("Japanese")){....
注意: 系統中增加業務規則類不是模式所能解決的,無論采用什么設計模式,JapaneseTax,JapaneseBonus總是少不了的。(即增加了新系列產品)
我們真正不能接受的是:我們仍然修要修改系統中原來的類(AbstractFactory)。前面提到過該系統的移植工作,我們可能轉包給一個叫Hippo的軟件公司。 為了維護版權,未將該系統的源碼提供給Hippo公司,那么Hippo公司根本無法修改AbstractFactory,所以系統移植其實無從談起,或者說系統移植總要開發人員親自參與。
解決方案是將抽象工廠類中的條件判斷語句,用.NET中發射機制代替,修改如下:
1using System;
2using System.Reflection;
3
4namespace AbstractFactory
5{
6 /**//// <summary>
7 /// AbstractFactory類
8 /// </summary>
9 public abstract class AbstractFactory
10 {
11 public static AbstractFactory GetInstance()
12 {
13 string factoryName = Constant.STR_FACTORYNAME.ToString();
14
15 AbstractFactory instance;
16
17 if(factoryName != "")
文章來源于領測軟件測試網 http://www.kjueaiud.com/