[重構到模式-State Pattern]把網球計分招式重構到狀態模式

來源:互聯網
上載者:User

剛剛把網球計分招式重構到狀態模式。
過程:
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持有的新的狀態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.