首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改维基百科的策略模式示例

修改维基百科的策略模式示例
EN

Stack Overflow用户
提问于 2018-03-15 09:30:09
回答 1查看 60关注 0票数 1

java example for strategy pattern:

如果我们有一个新的客户类型,如MemberCustomer,谁也可以被指控忠诚度积分,他有。正常或愉快时间的计费策略可能会发生以下变化:

代码语言:javascript
复制
NormalStrategyForMemberCustomer{
    double getActPrice(double rawPrice, int loyaltyPoints){
        return Math.max(rawPrice - loyaltyPoints, 0);
    }
}

HappyHoursStrategyForMemberCustomer{
    double getActPrice(double rawPrice, int loyaltyPoints){
        return Math.max(rawPrice*0.5 - loyaltyPoints, 0);
    }
}

在这种情况下,我是否应该将上面的方法创建为新的策略,并从客户类继承一个新的类作为MemberCustomer,并尝试适应这种策略模式?

还是有另一种更适合这里的设计模式?

此外,我知道向下移动的逻辑减去rawPrice的忠诚度点可以向下移动到最后的创建帐单步骤,但我这样做是为了使它类似于我的工作场所的问题。

EN

回答 1

Stack Overflow用户

发布于 2018-03-19 04:54:50

我会尝试使用类型。如果我误解了这个问题,请纠正我.

代码语言:javascript
复制
private class Customer
{
    Strategy<StrategyParam> s;
}

private class MemberCustomer
{
    Strategy<LoyaltyStrategyParam> s;
}

private interface Strategy<T extends StrategyParam>
{
  double getActAmount(T param);
}

private class StrategyParam {
    double rawPrice;
}

private class LoyaltyStrategyParam extends StrategyParam {
    int loyaltyPoints;
}

private class MemberStrategy implements Strategy<StrategyParam>
{
    double getActAmount(StrategyParam param);
}

private class HappyHourMemberStrategy implements Strategy<LoyaltyStrategyParam>
{
    double getActAmount(LoyaltyStrategyParam param);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49295702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档