《架構模式應用 ● 設計模式》之裝飾者

/**************************************************************************************************
** 設計思想需要歸納與提煉,無論簡單抑或複雜。當然方案未必是唯一的最佳路徑,在總結
** 的過程中發現問題、改善問題;只有跳出業務,將複雜問題簡單化,才能提綱挈領,尋找
** 共性與變化的制高點!
************************************************************************************************/

 

§案例場景:

1、交易訂單有諸多分類,且每種類都有各自的附加業務規則與邏輯:

    所以在保存訂單時,我們往往會附加不同業務處理,以填充業務訂單實體。

    eg: 計算積分規則、業務類型、額外擴展信息處理

    另外,在根據不同業務類型,獲取訂單擴展信息時,也需要額外附加職責。

2、參數校驗

    參數校驗通常體現在提供服務的接口上,不同的接口、不同的業務類型會存在不同的參數、業務校驗規則,抑或是橫向、縱向擴展,這裏是一個變化點。

§分析設計:

    以上兩類問題通常有個基本點,就是他們的事務處理大部分邏輯會有共性的表現,而後則是不同行爲的修飾與擴展。

§設計實現:

1、 設計類圖




2、 代碼實現

訂單修飾:

                DepositOrderInfo orderInfo = new DepositOrderInfo();
                //訂單主體
                IOrders orders = new MainOrder();
                //修飾
                orders = new ShopOrderDecorator(orders);
                //根據業務類型取得不同修飾對象
                InterfaceFactory factory = new InterfaceFactory();
                factory.PayChannel = payInfo.PayChannel;
                orders = factory.OrderDecoratorInstance(orders);
                //修飾
                orders = new MerchantOrderDecorator(orders);
                orders.FillOrderInfo(orderInfo, payInfo);
參數解析修飾:

                IParameters parameters = new ParameterService();
                //單層修飾
                parameters = new ShopParameter(parameters);
                ShopParameterInfo payInfo = parameters.AnalyzeParameter<ShopParameterInfo>(requestInfo);
                //......

                //校驗參數
                int returnCode = parameters.ValidateParameter(payInfo);
                if (returnCode != Consts.Success)
                {
                    return GetResponse(returnCode);
                }

3、主要示例代碼

      http://download.csdn.net/download/webwalker/7470273


§總結:

    案例實現簡單,沒有多層修飾的行爲,但是當存在多層修飾時,可以根據不同的業務類型與渠道,定義不同的修飾路徑,完成多層修飾。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章