zoukankan      html  css  js  c++  java
  • 把网球计分招式重构到状态模式

    刚刚把网球计分招式重构到状态模式。
    过程:
    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持有的新的状态

  • 相关阅读:
    一段自己写的丑陋的表单验证代码
    简单的星级评价
    有个项目
    好久没写了,重装了系统重新配置的Live Writer,看看效果:
    XmlHttpRequest调用Webservice的一点心得
    局域网共享怎么设置?我想把其中一个电脑的F盘共享?
    TCP/IP协议详解
    input file实现多张图片上传
    .NET C#中如何备份SQL数据库
    CSS中cursor鼠标形状属性列表
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3161428.html
Copyright © 2011-2022 走看看