剛剛把網球計分招式重構到狀態模式。
過程:
1)先實現沒有領先(no ad)情況的簡單的計分,並重構到狀態模式
網球計分
1.1)如果第一位選手先贏了4個球(point),那麼這位選手就贏了一局(game)。
1.2)每一局的計分用網球界特有的方式來統計:贏0、1、2、3個球,分別計love、15、30、40分。
2)再考慮有領先情況的計分
網球計分
2.1)如果第一位選手總共贏了至少4個球(point),並且至少比對手多贏2個球,那麼這位選手就贏了一局(game)。
2.2)每一局的計分用網球界特有的方式來統計:贏0、1、2、3個球,分別計love、15、30、40分。
2.3)如果每位選手都已經贏了至少3個球,且得分相同,那麼每位選手就稱為「平分(deuce)」。
2.4)如果每位選手都已經贏了至少3個球,並且其中一位選手比對方多贏1球,那麼該選手稱為「領先(advantage)」。
下面是一些體會。
* 1) 重構到模式是在模式的意圖方向的驅動下從沒有模式的**一點點「雕刻」出來的,而不是照著模式空降幾個類堆出來的。
* 2)重構到state模式的「雕刻」步驟:
* 2.1)先不考慮設計模式,用if或switch語句實現業務邏輯
* 2.2)建立context類,並把業務邏輯移動到該處
* 2.3)建立state抽象類,並在context中通過持有state物件,把業務邏輯委託到state抽象類完成
* 2.4)在state的子類中實現具體業務邏輯,從而消除if或switch語句,並在其中將下一狀態儲存到context持有的state域中,作為context持有的新的狀態
網球計分系統
tennis.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std 函式宣告 int fju string ball void score char ch int fpan void winner int a,i...