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

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

§案例場景:

1、接收參數處理交易、充值明細,訂單號在不同的業務流程中存在性不確定。

2、訂單明細頁面,顯示不同類型訂單處理結果

     銀行卡、一點充、銀聯快捷支付、**卡支付、**卡充值、購買卡密、錢包餘額、轉賬劃賬等等,每類業務結果可能顯示的UI。

3、頁面結構

     大致分爲:充值提示、積分提示與嵌入頁面、特定遊戲充值提示、返回按鈕(繼續購買、充值、首頁……),另外還有一個充值、支付不確定性提示。

     當然,每一部分都有可能“變種”,暫且看成是一類問題。

§分析設計:

1、參數爲動態變化,且部分參數考慮安全需要加解密

     增加參數解析器,

2、需要根據參數確定不同業務類,且需將部分參數帶入業務類

     增加業務適配器

3、不同的業務類,可通過不同的建造對象,構造完成後呈現到頁面端

     建造者模式

§設計實現:

1、設計類圖      

2、代碼實現

                //設定Adapter
                ResultAdapter adapter = new ResultAdapter();
                adapter.ResultType = RequestType;
                adapter.OrderID = OrderID;
                adapter.PaymentID = PaymentID;
                adapter.ErrorCode = ErrorCode;

                //指揮構造
                DirectorResult director = new DirectorResult();
                //設定生成器
                BuilderResult builder = director.Create(adapter);
                //構造產品
                director.Construct(builder);
                //返回結果
                ProductResult product = builder.GetResult();
                if (product == null
                    || product.ReturnCode != Consts.Success)
                {
                    Product = product == null ? new ProductResult() : product;
                    ShowUI(Pay_Alter_PH);
                    return;
                }

                ShowUI(Pay_Success_PH);


3、主要示例代碼

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

§總結:

       當然,還可有通過XML+XSLT的方式來實現,更爲簡單一些(不同業務實體構造相同或不同XML,配合定義的XSLT顯示不同結果頁面)


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