在機房收費系統中自我感覺上機是需要條件判斷最多的乙個功能,要判斷:1、卡號是否存在;2、密碼是否正確;3、該卡是否能用;4、該卡是否已經上機;5、卡裡面是不是有錢。暫時僅我自己就能想到了這麼多判斷,如果還是按照以前的寫法的話,要寫多少的if...else...呢,全都羅列在一起也不符合物件導向的思想,所以,就可以用到狀態模式來解決這個問題。
狀態模式
當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。
它主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。
好處:
將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。目的是消除龐大的條件分支語句,狀態模式通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。
狀態模式結構圖:
機房收費系統上機中的狀態模式:
從類圖可以看出,我定義了乙個抽象狀態類,五個具體狀態類和乙個例項維護類。
上機抽象類:
public abstract class cardonlinestate
上機條件判斷具體狀態類:
public class i***itcard : cardonlinestate
else}}
public class checkpwd : cardonlinestate
else}}
public class iscarduse : cardonlinestate
else}}
public class isonline : cardonlinestate
else}}
public class isleastcash : cardonlinestate}}
維護狀態類的例項:
public class cardonlinecontext
//可讀寫的狀態屬性,用於讀取當前狀態和設定新狀態
public cardonlinestate cardonlinestate
set
}//對請求處理,並設定下一狀態
public void setstate(cardentity cardentity, lineinfoentity lineinfoentity, basicdataentity basicdataentity)
}
呼叫:
public void linelogin(cardentity cardentity, lineinfoentity lineinfoentity, basicdataentity basicdataentity)
關於狀態模式的運用也是磕磕絆絆的過來的,曾一度被改的面目全非,但一遍一遍的除錯對設計模式的理解也就愈發深刻,最終還是成功執行出來了,所以,要大膽去做,不去做又怎麼會知道成功就在不遠的拐角處呢? 機房合作 狀態模式與上機
在機房收費系統中,有幾個業務邏輯是比較複雜的,比如說上機 下機。記得我在做第一版vb收費系統的時候,還特別地將上下機拿出來畫了乙個完整的流程圖,要不這樣做的話,最後的結果一定是懵了,也不想再繼續寫 了。在進行設計模式的學習之前,我們很有必要將上機這一業務邏輯完整的梳理一遍。一.上機業務邏輯 1.判斷...
機房合作 狀態模式與上機
在機房收費系統中,有幾個業務邏輯是比較複雜的,比如說上機 下機。記得我在做第一版vb收費系統的時候,還特別地將上下機拿出來畫了乙個完整的流程圖,要不這樣做的話,最後的結果一定是懵了,也不想再繼續寫 了。在進行設計模式的學習之前,我們很有必要將上機這一業務邏輯完整的梳理一遍。一.上機業務邏輯 1.判斷...
單例模式 機房合作
單例模式,保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。對於單例模式的概念和作用大家可以去問度哥,這篇文章主要將的是如何使用單例模式實現窗體的唯一。先說說我的歷程吧。看了 大話設計模式 感覺看懂了。然後就開始畫時序圖,主窗體在呼叫子窗體前先要經過乙個判斷類,判斷該窗體是否已經別例項化。根據...