import java.util.*; abstract class CState { public int flyMiles; // 里程数 public (1); // 根据累积里程数调整会员等级 } class CNoCustomer extends CState { // 非会员 public double travel(int miles, CFrequentFlyer context) { System.out.println("Your travel will not account for points"); return miles; // 不累积里程数 } } class CBasic extends CState { // 普卡会员 public double travel(int miles, CFrequentFlyer context) { if (context.flyMiles >= 25000 && context.flyMiles < 50000) (2); if (context.flyMiles >= 50000) (3); return miles; } } class CGold extends CState { // 金卡会员 public double travel(int miles, CFrequentFlyer context) { if (context.flyMiles >= 25000 && context.flyMiles < 50000) (4); if (context.flyMiles < 25000); (5); return miles + 0.5 * miles; // 累积里程数 } } class CSilver extends CState { // 银卡会员 public double travel(int miles, CFrequentFlyer context) { if (context.flyMiles <= 25000) context.setState(new CBasic()); if (context.flyMiles >= 50000) context.setState(new CGold()); return (miles + 0.25 * miles); // 累积里程数 } } class CFrequentFlyer { CState state; double flyMiles; public CFrequentFlyer() { state = new CNoCustomer(); flyMiles = 0; setState(state); } public void setState(CState state) { this.state = state; } public void travel(int miles) { double bonusMiles = state.travel(miles, this); flyMiles = flyMiles + bonusMiles; } }