結算系統主要是生成賬單,當然賬單有多種型別,不同賬單生成的條件可能不同、賬單資料組裝可能不同、賬單生成之後有不同的後續業務處理……
個人對各個模式的理解和為何使用的理解:
多個業務處理流程一致,可以吧整個流程抽象到父類,在父類中定義整個流程的骨架。
公共的方法提公升到父類,在父類實現、多個子類公用。
子類實現流程中自己使用的特殊處理
策略模式是乙個業務場景中需要的多種策略、演算法的封裝,這些演算法是可以替換呼叫。
策略模式是面上策略抽象類程式設計,在業務**無感知的情況下可以替換演算法。
使用策略模式將業務**和策略邏輯**解耦。
對於乙個請求有多個處理類,多個處理類按照鏈模式處理,處理結束
責任鏈對乙個請求的處理抽象成乙個處理抽象類,多個具體處理類實現處理抽象類並將自己新增到鏈管理類,在執行的時候執行所有鏈中的處理類。
使用責任鏈將乙個請求的多個處理封裝在各個處理實現類,如果對這類請求要新增其他過濾條件則不用修改原有業務邏輯,只需要繼承抽象處理類。
當乙個事件發生時需要多個物件有相應處理即多個物件關注乙個事件時使用觀察者模式。
觀察者模式是多對多關係,即多個物件可以關注乙個事件,也可以是乙個物件關注多個事件,但大多數情況下是乙個事件被多個物件關注。
責任鏈和觀察者模式都是將業務邏輯和該請求、事件的相關處理解耦,方便擴充套件。
整個賬單生成使用方法模板模式、不同賬單型別繼承方法模板抽象類;模板抽象類中定義賬單生成流程、骨架;模板抽象類中實現公共方法供各個子類使用,實現**復用。
子類實現抽象校驗方法;生成賬單必要條件校驗使用***鏈來校驗,各個***做必要校驗,如是否必填引數為空、是否重複入庫、前置操作是否完成……,如果某個條件不滿足則***返回,業務流程執行中斷。
子類實現賬單物件獲取抽象方法;賬單bean物件獲取可以使用建造者模式來獲取。
子類實現訊息傳送結果處理抽象方法;具體處理使用觀察者模式。
設計模式的使用可能會增加部分**的實現複雜度、閱讀複雜度但是設計模式的適當使用可以降低**耦合性、方便新增業務需求方便擴充套件、減少對**改動的影響範圍、從而確認測試範圍、減少測試工作量。
如果對系統不熟悉、對業務不熟悉、對系統發展沒有乙個規劃的話設計模式還是少用;如果沒有整體規劃則你的某種設計模式的使用和不適用沒有區別而且還增加複雜度、**量所以在系統中使用設計模式還是要對系統、系統業務要熟悉並且有乙個規劃,然後按照系統規劃去設計實現,這樣你的設計模式可能會發揮他的作用。
設計模式 工廠在收費系統中的應用
抽象工廠 abstract factory 提供乙個建立一系列相關或相互依賴物件的結構,而無需指定他們具體的類。抽象工廠uml圖 abstractproducta和abstractproductb是兩個抽象產品,它們可能是兩種不同的實現。在機房收費系統中可以理解為對兩個表的不同操作。而product...
實戰中的策略模式
這裡舉乙個 vue elementui 專案中用到的例子,其他框架的專案原理也類似,和大家分享一下。element 的 控制項的 column 接受乙個 formatter 引數,用來格式化內容,其型別為函式,並且還可以接受幾個特定引數,像這樣 function row,column,cellval...
Android系統設計中的設計模式分析之四
uml中,不同的物件之間的關係有generation,implementation,dependence,association,aggregation,composition這六種關係。其中,generation,implementation,dependence這個比較容易 理解,代表了程式中的...