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


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

  • 相关阅读:
    STM32 定时器用于外部脉冲计数
    幸福是怎么来的
    STM32 I/O的耐压问题,中断问题,以及如何在Keil (RVMDK) 中观察程序的执行时间
    STM32输入捕获简介
    STM32 直流减速电机控制
    2013 初始
    js 为字符串添加样式
    js 实现页面显示钟表
    JavaScript 入门总结
    ADO.NET基本数据库编程
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3161428.html
Copyright © 2020-2023  润新知