天天看點

機房重構--職責鍊模式的運用

   前沿

      機房下機的時候算錢的功能是必不可少的,但是要怎麼寫,寫在哪呢?

      下機算錢不僅僅是機關錢數*機關時間就OK了,還有别忘記其他因素在裡面

      比如有的小夥伴算錢是根據顧客的級别來區分。如果每小時10元的話,那麼普通顧客就是每小時10元,VIP顧客就會打8折;又或者按時間進行算錢,比如在2分鐘之内是不收錢的,大于2分鐘并且在一個小時之内是按1.2倍算錢,超過1個小時正常收費。

      是以不管怎樣,不同狀态的改變算錢的政策也會随之改變,這時如果我們用到職責鍊的話就友善多了

      我的職責鍊是按照時間進行算錢并且寫在了B層,它是負責邏輯判斷的,是以放在B層在合适不過了

      按時間算錢就必須得到機關錢數(Rate),機關時間(UnitTime),除了這些還得得到準備時間(ReadyTime),如圖所示:

機房重構--職責鍊模式的運用

       這3個時間的值都是從T_BasicData表中查詢得到的,還有别忘了定義全局變量(紅框)

      (1)下一步就開始寫職責鍊了,如圖所示

機房重構--職責鍊模式的運用

      首先先定義c1、 c2、c3。它們3幹什麼的呢?

      如果上機時間在2分鐘以内(包括2分鐘)顧客就下機了,那麼就去找c1

      如果上機時間大于2分鐘并且小于等于60分鐘,c1權限就不夠了,那麼就去找c2

      如果上機時間大于60分鐘,c2權限就不夠了,那麼就去找c3

      (2)父類

機房重構--職責鍊模式的運用

      如果父類定義的是抽象類型,那麼裡面的方法必須有虛方法且不用寫方法體

      (3)子類

機房重構--職責鍊模式的運用

      這3個子類就相當于c1、c2、c3繼承了父類,是以每個方法裡都必須重寫父類裡的虛方法,每個虛方法都會有不同的權限去判斷。

   總結

      是以職責鍊可以簡化對象的互相連接配接,他們隻需要儲存一個指向其後續者的引用,而不需要儲存所有候選者的引用。

      部落格到這裡就結束了,職責鍊确實是個非常強大的模式,但是它也并不是萬能的,我們在使用的時候還要多多注意!!!