影片出租店 重构方法(3)

 影片出租店是《重构:改善既有代码的设计》里面的第一个例子。使用了多种重构方法。
影片出租店:计算每一位顾客的消费金额并打印详单。
操作者告诉程序:顾客租了哪些影片,租期多长,程序便根据租赁时间和影片类型算出费用。影片分为三类:普通片,儿童片和新片。除了计算费用,还要为常客计算积分,积分会根据租片种类是否为新片而有不同。
影片出租店 重构方法(3)_第1张图片

第2次重构:

  • Move Method: 由于AmountFor只用到了rental ,而没有用到customer的任何函数。
    • A: 应该把AmountFor移动到rental类中
    • B:   修改AmountFor的函数名, GetCharge()
    • C:    如果AmountFor使开放给客户的接口,就不应该在customer类中直接调用GetCharge,应该保留AmountFor方法。如果不是,就可以在customer类中直接调用GetCharge。

修改后的代码

double Rental::GetCharge()
{
    double Result = 0;
    switch (GetMovie()->GetPriceCode())
    {
    case Movie::REGULAR:
        Result += 2;
        if (GetDaysRented() > 2)
        {
            Result += (GetDaysRented() - 2)*1.5;
        }
        break;
    case Movie::NEW_RELEASE:
        Result += GetDaysRented() * 3;
        break;
    case Movie::CHILDREN:
        Result += 1.5;
        if (GetDaysRented() > 3)
        {
            Result += (GetDaysRented() - 3)*1.5;
        }
        break;
    }
    return Result;
}
double Customer::AmountFor(Rental *rental)
{
    return rental->GetCharge();
}

测试结果:
影片出租店 重构方法(3)_第2张图片
 

你可能感兴趣的:(重构)