sunny軟體公司開發人員使用狀態模式來解決賬戶狀態的轉換問題,客戶端只需要執行簡單的存款和取款操作,系統根據餘額將自動轉換到相應的狀態,其基本結構如圖4所示:
圖4 銀行賬戶結構圖
在圖4中,account充當環境類角色,accountstate充當抽象狀態角色,normalstate、overdraftstate和restrictedstate充當具體狀態角色。完整**如下所示:
//銀行賬戶:環境類
class account
public double getbalance()
public void setbalance(double balance)
public void setstate(accountstate state)
public void deposit(double amount)
public void withdraw(double amount)
public void computeinterest() }
//抽象狀態類
abstract class accountstate
//正常狀態:具體狀態類
class normalstate extends accountstate
public normalstate(accountstate state)
public void deposit(double amount)
public void withdraw(double amount)
public void computeinterest()
//狀態轉換
public void statecheck()
else if (acc.getbalance() == -2000)
else if (acc.getbalance() < -2000)
}
} //透支狀態:具體狀態類
class overdraftstate extends accountstate
public void deposit(double amount)
public void withdraw(double amount)
public void computeinterest()
//狀態轉換
public void statecheck()
else if (acc.getbalance() == -2000)
else if (acc.getbalance() < -2000) }}
//受限狀態:具體狀態類
class restrictedstate extends accountstate
public void deposit(double amount)
public void withdraw(double amount)
public void computeinterest()
//狀態轉換
public void statecheck()
else if(acc.getbalance() > -2000)
}}
編寫如下客戶端測試**:
class client
}
編譯並執行程式,輸出結果如下:
段譽開戶,初始金額為0.0
---------------------------------------------
段譽存款1000.0
現在餘額為1000.0
現在帳戶狀態為normalstate
---------------------------------------------
段譽取款2000.0
現在餘額為-1000.0
現在帳戶狀態為overdraftstate
---------------------------------------------
段譽存款3000.0
現在餘額為2000.0
現在帳戶狀態為normalstate
---------------------------------------------
段譽取款4000.0
現在餘額為-2000.0
現在帳戶狀態為restrictedstate
---------------------------------------------
段譽取款1000.0
帳號受限,取款失敗
現在餘額為-2000.0
現在帳戶狀態為restrictedstate
---------------------------------------------
計算利息!
】
處理物件的多種狀態及其相互轉換 狀態模式(一)
人有悲歡離合,月有陰晴圓缺 包括人在內,很多事物都具有多種狀態,而且在不同狀態下會具有不同的行為,這些狀態在特定條件下還將發生相互轉換。就像水,它可以凝固成冰,也可以受熱蒸發後變成水蒸汽,水可以流動,冰可以雕刻,蒸汽可以擴散。我們可以用uml狀態圖來描述h2o的三種狀態,如圖1所示 圖1 h2o的三...
處理物件的多種狀態及其相互轉換 狀態模式(三)
sunny軟體公司開發人員使用狀態模式來解決賬戶狀態的轉換問題,客戶端只需要執行簡單的存款和取款操作,系統根據餘額將自動轉換到相應的狀態,其基本結構如圖4所示 圖4 銀行賬戶結構圖 在圖4中,account充當環境類角色,accountstate充當抽象狀態角色,normalstate overdr...
處理物件的多種狀態及其相互轉換 狀態模式(三)
sunny軟體公司開發人員使用狀態模式來解決賬戶狀態的轉換問題,客戶端只需要執行簡單的存款和取款操作,系統根據餘額將自動轉換到相應的狀態,其基本結構如圖4所示 圖4 銀行賬戶結構圖 在圖4中,account充當環境類角色,accountstate充當抽象狀態角色,normalstate overdr...