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持有的新的状态

  • 相关阅读:
    CentOS 8.0配置阿里云yum源和epel源
    CentOS8 安装epel 使用阿里云镜像
    centos下yum使用proxy代理方法
    MySQL中的事务控制(一)start transaction
    MySQL中的锁定语句: lock tables 和 unlock tables
    MySQL中的触发器
    MySQL中的事件调度器
    MySQL中的流程控制
    MySQL中的不可见索引、倒序索引
    IDEA出现Push to origin/master was rejected
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3161428.html
Copyright © 2011-2022 走看看