處理物件的多種狀態及其相互轉換 狀態模式(三)

2021-08-27 09:22:03 字數 2495 閱讀 7705

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...