NBA之责任链模式

97 阅读1分钟

Design Pattern:

As the name suggests, the chain of responsibility pattern creates a chain of receiver objects for a request. 模式:责任链为请求创造了一个接受处理对象链

背景:NBA->常规赛,季后赛,总决赛

赛事的抽象
  public abstract class Season {
      //赢了的result
      public String result;
      //赛况
      private boolean success;
      //下一个赛季
      public Season nextSeason;
  
      public Season(String result,boolean success) {
          this.result = result;
          this.success = success;
      }
  
      public void setNextSeason(Season nextSeason) {
          this.nextSeason = nextSeason;
      }
  
      void play(){
          if (success){
              System.out.println(result);
              if (nextSeason != null){
                  nextSeason.play();
              }
          }
      }
  }

具体的赛事,由于play逻辑相似直接在Season里写了 三个实现类目的是名字有用(其实也可以只有一个实现类,三个变量名)
//常规赛
public class RegularSeason extends Season{

    public RegularSeason(String result, boolean success) {
        super(result, success);
    }
}
//季后赛
public class PlayoffSeason extends Season{

    public PlayoffSeason(String result, boolean success) {
        super(result, success);
    }
}

//总决赛
public class FinalsSeason extends Season{

    public FinalsSeason(String result, boolean success) {
        super(result, success);
    }
}


比赛开始
public class ResponsibilityDemo {


    public static void main(String[] args) {
        System.out.println("↓↓↓↓↓↓勇士战绩↓↓↓↓↓↓");
        Season warriorFinalsSeason = new FinalsSeason("总决赛赢了,获得总冠军",true);
        Season warriorPlayoffSeason = new PlayoffSeason("季后赛赢了",true);
        Season warriorSeason = new RegularSeason("常规赛赢了",true);
        warriorSeason.setNextSeason(warriorPlayoffSeason);
        warriorPlayoffSeason.setNextSeason(warriorFinalsSeason);
        warriorSeason.play();
        System.out.println("-----------vs-------------");
        System.out.println("↓↓↓↓↓↓骑士战绩↓↓↓↓↓↓");
        Season cavaliersFinalsSeason = new FinalsSeason("总决赛赢了,获得总冠军",false);
        Season cavaliersPlayoffSeason = new PlayoffSeason("季后赛赢了",true);
        Season cavaliersSeason = new RegularSeason("常规赛赢了",true);
        cavaliersSeason.setNextSeason(cavaliersPlayoffSeason);
        cavaliersPlayoffSeason.setNextSeason(cavaliersFinalsSeason);
        cavaliersSeason.play();

    }
}

结果