哎,最近一直在河北華為移動項目組做外包,一直也沒有機會寫什么代碼,也沒機會上網 ,真的是郁悶死了。 我們在做某一些操作的時候,遇到不同狀態的時候就會有不同的處理方式。為了判別這些狀態,我們必然會使用大量的if else語句來做狀態判斷處理。而隨著if else(或switch case)語句的增多,程序的可讀性,擴展性也會變得很弱。維護也會很麻煩,你可能看到過有的代碼中 一個函數就有n多if語句,代碼甚至超過了上千行。 舉一個例子:我們給一部手機打電話,就可能出現這幾種情況:用戶開機,用戶關機,用戶欠費停機,用戶消戶等。 所以當我們撥打這個號碼的時候:系統就要判斷,該用戶是否在開機且不忙狀態,又或者是關機,欠費等狀態。但不管是那種狀態我們都應給出對應的處理操作。下面我們用代碼來模擬一下這個過程。
注意,看看上面的代碼,顯然它已經完成了我們的基本業務操作,但是,一旦我們有新的狀態加入的話,我們勢必要在每個業務方法里邊增加相應的else if語句。所以加入x個狀態就有可能加入n*x條else if語句,n表示函數(業務方法)的數量。 狀態模式:把不同狀態的操作分散到不同的狀態對象里去完成。看看狀態類的uml類圖。 從上圖可以看出,每一個狀態類都會去處理所有的業務方法,根據他自身的狀態,去讓不同函數(業務方法)作相應的不同處理。而我們先前的方式是,在不同的函數(業務方法)里去判斷不同狀態,然后分別對每一個狀態作不同的處理。很顯然,我們采用狀態模式的方式在后續擴張和維護能力上都得到了很大程度提高,比如我們先加入一個狀態,我就只僅僅需要加入一個相應的狀態類就可以了。代碼量也就是實現該狀態下各個函數的不同處理過程而已。好,看看實現代碼:
posted on 2008-03-14 13:51 sam.chuan.yang 閱讀(5898) 評論(2) 編輯 收藏 所屬分類: 23設計模式的理解