某航空公司的会员积分系统将其会员划分为:普卡(Basic)、银卡(Silver)

题库2022-08-02  54

问题 某航空公司的会员积分系统将其会员划分为:普卡(Basic)、银卡(Silver)和金卡(Gold)三个等级。非会员(Non Member)可以申请成为普卡会员。会员的等级根据其一年内累积的里程数进行调整。描述会员等级调整的状态图如图5-1所示。现采用状态(State)模式实现上述场景,得到如图5-2所示的类图。

选项

答案

解析 (1)virtual double travel(int miles,FrequentFlyer*context)=0
(2)context->setState(context→silver)
(3)context->setState(context→gold)
(4)context->setState(context→silver)
(5)context->setState(context→basic)
由代码可知,(1)空缺少一个抽象方法,根据下面的子类可以发现,子类都有double travel(int miles,FrequentFlyer context)方法,是从该抽象类中继承而来,因此(1)空应该补充这个方法,并加上abstract修饰,即(1)virtual double travel(int miles,FrequentFlyer*context)=0。
(2)(3)(4)(5)可以从状态图中根据相关状态推断出来。
首先,(2)(3)属于普卡会员CBasic,从状态图和代码可以看到,当里程>=25000且<5000时,会员等级应该从普卡会员CBasic升级到银卡会员CSilver,根据后面已有的代码,可以推断表示升级到银卡会员CSilver的表示方式为:
context->setState(context->silver);同理对于(3)空,在普卡会员CBasic状态,里程>=50000时,应该升级为金卡会员CGold,此时升级金卡CGold的表示方式为context->setState(ncontext->silver),以此类推,(4)(5)分别对应金卡会员CGold状态下,不同条件,降低的不同等级。因此(4)为降级为银卡会员CSilver,(5)为降级为普卡会员CBasic,对应的表示方式分别为context->setState(context->silver)和context->setState(context->basic)。
注:
本题空(3)条件代码有异议,参照题干逻辑,此处缺失向金卡会员的变迁。因此可填写context->setState(context->gold)。
转载请注明原文地址:https://tihaiku.com/congyezige/2409826.html

最新回复(0)