当前位置:编程学习 > 网站相关 >>

把网球计分招式重构到状态模式

刚刚把网球计分招式重构到状态模式。
过程:
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)在Context的子类中实现具体业务逻辑,从而消除if或switch语句,并在其中将下一状态保存到Context持有的State域中,作为Context持有的新的状态

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,