java - 如何将客户更改为不同的成员(member)资格? java

标签 java inheritance interface

我正在尝试学习 Java 中的继承和接口(interface)。我有三个不同的类:Customer、SilverCustomer 和 GoldCustomer。 SilverCustomer 和 GoldCustomer 都扩展了 Customer。

在应用程序中,客户通过旅行获得积分。普通客户获得他们前往积分的里程。 SilverCustomer 获得里程 * 1.5,GoldCustomer 获得里程 * 2。

当我创建普通客户 John 时,如何使用方法 downgrade() 和 upgrade() 在普通客户、silvercustomer 和 goldcustomer 之间切换?

class Testfile {
     public static void main(String[] args) {

         Airline aProgram = new Airline();

         Customer john = new Customer("john", 10001); // 10001 is the id number and the status of a customer is normal

         aProgram.addMembers(john);

    john.update_mileage(12000);
    john.upgrade(); //upgrade John to SilverCustomer
    john.update_mileage(2000);

     aProgram.printAllCustomerMilege(); 
   }
}

最佳答案

对象的类一旦创建就无法更改。

如果您的逻辑取决于客户的类型,您可以使用策略设计模式。在您的示例中,您可以编写如下内容:


interface Strategy {
    double getMileageCoefficient();
}
class NormalCustomerStrategy implements Strategy {
    public double getMileageCoefficient() {
        return 1.0;
    }
}
class GoldCustomerStrategy implements Strategy {
    public double getMileageCoefficient() {
        return 2.0;
    }
}

在您的 Customer 类中将有一个私有(private)字段 Strategy 策略; 然后您的升级方法将如下所示:


void upgrade() {
    this.strategy = new GoldCustomerStrategy();
}

以及 upgradeMileage 方法:


void upgradeMileage(double mileage) {
    this.mileage += strategy.getMileageCoefficient() * mileage;
}

关于java - 如何将客户更改为不同的成员(member)资格? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549048/

相关文章:

java - Java中如何为继承字段赋值?

java - 定义多接口(interface)变量

java - 如何使 JTextField 接受以逗号作为分隔符的 double 值?

Java opencv robinson mask,图像全黑

来自文件路径的 Java 输入和输出流

c++ - 模板中的虚拟方法未生成

c++ - 虚拟的概念

java - Java 接口(interface)中的默认方法返回值

delphi - 如何将 DRY 应用于涉及 Form 组件的接口(interface)实现?

java - 打印对象到文件txt