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();
}
}