<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                機房收費系統收費制度——策略+簡單工廠模式 前段時間把設計模式學了個遍,確切的說是初識。因為看過后,腦袋里就只剩下這幾個模式叫什么了,怎么用,類圖是什么,都不記得了。 現在機房收費系統重構,剛好拿幾個過來練練手。 ## 一、策略模式的使用環境 機房收費系統在下機收費這塊,涉及到兩種卡的收費,一種是固定用戶,一種是臨時用戶。不同的用戶消費單價不相同,導致在讀取數據庫的時候會有兩種不同的查詢方法,這樣的情況適合使用策略模式來解決。(其實這里的情況比較簡單,系統小,用模式有點復雜,這里只是為了學習策略模式和簡單工廠) ## 二、具體實現 Client 類 ~~~ '計算收費類 '相當于策略模式中的Client '定義收費計算公式 Public Class CalculateConsume '聲明實體類——數據表 Dim dataen As New Model.Data_Table '聲明實體類對象——消費表 Dim customeren As New Model.Consume_Table '定義dataaccess 類 Dim da As New DataAccess.DataAccess '定義收費頻率 Dim frequency As Integer '定義準備時間 Dim timeready As Integer '定義最少上機時間 Dim timemin As Integer '計算公式 '調用ContextConsume類 Public Function CaculateMoney(cardnum As Integer) As Model.Consume_Table '初始化策略模式配置類 Dim conprice As New ContextConsume(cardnum) '調用方法,獲取消費單價 Dim unitprice As Integer = conprice.Getresult() '定義消費金額 Dim costmoney As Integer '計算消費金額=單價*消費時長 costmoney = unitprice * Interval(GetOnTime(cardnum)) '把計算結果傳值給實體類 customeren.P_cost = costmoney customeren.P_interval = Interval(GetOnTime(cardnum)) '將(下機)現在時間傳給實體類 customeren.P_offtime = Format(Now, "hh-nn") Return customeren End Function '獲取某個卡的上機時間——被Client 調用 Public Function GetOnTime(cardnnum) As Model.Consume_Table '創建接口 Dim ico As IDAL.IConsume = da.CreateConsume() '調用D層方法,并返回 Return ico.GetPOnTime(cardnnum) End Function '計算消費時長——把實體類當參數傳遞 Public Function Interval(customeren As Model.Consume_Table) As Long '把讀取來的上機時間賦值給日期變量 Dim ondate As Date = Format(CDate(customeren.P_ondate), "mm-dd") Dim ontime As Date = Format(CDate(customeren.P_ontime), "HH-nn") '以當前時間為結束時間 Dim enddate As Date = Format(Now, "mm-dd") Dim endtime As Date = Format(Now, "HH-nn") '調用系統函數 datediff 計算時間間隔 Dim costdate As Long = DateDiff("n", Trim(ondate), Trim(enddate)) Dim costtime As Long = DateDiff("n", Trim(ontime), Trim(endtime)) '調用系統函數cint 四舍五入來求的 時間間隔 '上機時間小于最小上機時間,按30分鐘算 If (costdate + costtime) < timemin & (costdate + costtime) > timeready Then Interval = 1 Else '上機時間大于最小上機時間 Interval = CInt((costtime + costdate - timeready) / frequency) End If End Function '取得基本數據表中的數據 Public Function GetData() As Model.Data_Table '創建接口 Dim id As IDAL.IData = da.CreateData() '調用D層方法——取得數據 dataen = id.GetData() '取出收費頻率 frequency = dataen.P_frequency '取出最少上機時間 timemin = dataen.P_timemin '取出準備時間 timeready = dataen.P_timeready '返回值 Return dataen End Function End Class ~~~ 策略類中接口 ~~~ '策略模式 '根據用戶類型,到數據庫中去查詢不同的消費價格 '不同的用戶,實現查詢的語句不同 Public Interface ConsumePrice '讀取不同用戶的消費價格 Function Getprice() As Integer End Interface ~~~ 配置策略類的context +簡單工廠實現 ~~~ '關聯策略模式 '實例化策略模式接口 Public Class ContextConsume '聲明消費單價類對象——策略模式 Dim cp As IStrategy.ConsumePrice '構造函數,運用簡單工廠,根據傳入參數確定具體的收費策略 Public Sub New(cardnum As Integer) '根據參數選擇實例化對象 Select Case Cardtype(cardnum) Case "臨時用戶" cp = New TempConsume() Exit Sub Case "固定用戶" cp = New RegularConsume() Exit Sub End Select End Sub '根據卡類型,獲取收費單價 Public Function Getresult() As Integer '返回具體方法的實現 Return cp.Getprice() End Function '獲取卡的類型 Public Function Cardtype(cardnum As Integer) As String '聲明dataaccess 類 Dim da As New DataAccess.DataAccess '創建接口 Dim ic As IDAL.ICards = da.CreateCards() '返回值 Return ic.GetCardType(cardnum) End Function End Class ~~~ 實現接口的具體類 ~~~ '獲取固定用戶的消費單價 Public Class RegularConsume Implements IStrategy.ConsumePrice '獲取固定用戶的消費單價 Public Function Getprice() As Integer Implements IStrategy.ConsumePrice.Getprice '聲明工廠對象 Dim da As New DataAccess.DataAccess '創建接口 Dim id As IDAL.IData = da.CreateData '創建datatable對象 Dim dataen As New Model.Data_Table '調用D層方法實現 dataen = id.GetPriceRegular() '取出需要的值,并返回 Return dataen.P_priceregular End Function End Class ~~~ 臨時用戶 ~~~ '獲取臨時用戶的消費價格 Public Class TempConsume '實現IStrategy接口 Implements IStrategy.ConsumePrice '獲取臨時用戶的消費價格 Public Function Getprice() As Integer Implements IStrategy.ConsumePrice.Getprice '聲明工廠對象 Dim da As New DataAccess.DataAccess '創建接口 Dim id As IDAL.IData = da.CreateData '創建datatable對象 Dim dataen As New Model.Data_Table '調用D層方法實現 dataen = id.GetPriceTemp() '取出需要的值,并返回 Return dataen.P_pricetemp End Function End Class ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看