首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >策略设计模式用例在高校Intranet系统开发中的应用

策略设计模式用例在高校Intranet系统开发中的应用
EN

Stack Overflow用户
提问于 2016-11-19 22:09:11
回答 2查看 311关注 0票数 0

我可以使用策略模式来实现以下逻辑:因此,假设学费是根据学生的整体表现来计算的,例如,如果学生的总体平均分数超过70分,他的学费将减少70%。以此类推..如果平均分数低于50%,其他情况下则不打折。因此,有不同的策略来计算折扣,这取决于平均分数。如何在Java代码中实现这一点?我认为学生类将有计算平均分数的方法,接口TuitionFeeCalculator和三个策略:70%折扣,50%折扣和noDiscount实现TuitionFeeCalculator。

EN

回答 2

Stack Overflow用户

发布于 2016-11-19 22:35:03

假设这只是一个课堂练习,因为您永远不会为这么简单的事情实现策略模式,但您正在寻找的内容如下:

代码语言:javascript
复制
public interface TuitionFeeCalculator {
    double calculateFee(double fee);
}

public class Fee70 implements TuitionFeeCalculator {
    @Override
    public double calculateFee(double fee) {
        return fee * (1-0.7);
    }
}

public class Fee50 implements TuitionFeeCalculator {
    @Override
    public double calculateFee(double fee) {
        return fee * (1-0.5);
    }
}

public class FeeNoDiscount implements TuitionFeeCalculator {
    @Override
    public double calculateFee(double fee) {
        return fee;
    }
}

public class Student {
    double tf;

    public Student(double tuitionFee) {
        this.tf = tuitionFee;
    }
}

public static void main(String[] args) {

    double averageMark = 90;
    double fee = 10000;

    TuitionFeeCalculator feeCalculator;
    if(averageMark >70) {
        feeCalculator = new Fee70();
    } else if (averageMark > 50) {
        feeCalculator = new Fee50();
    } else {
        feeCalculator = new FeeNoDiscount();
    }

    Student s = new Student(feeCalculator.calculateFee(fee));
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-19 23:31:51

有没有人能检查一下这个代码,告诉我有没有什么问题

代码语言:javascript
复制
 public class StrategyDemo
 {

  public static void main(String[] args)
  {
    Student s = new Student();
    TuitionFee fee = new TuitionFee();
    fee.setTuitionFee(5000);
    StudentStatus status = new StudentStatus(s);
    CalculatorSelectorFactory calc = new CalculatorSelectorFactory(status.getStatus());
    TuitionFeeCalculator tfc = calc.getCalculator();
    double newFee = tfc.calculate();



  }
}


public class StudentStatus
{
  private Student student;

  public StudentStatus(Student student){
    this.student = student;
  }
  public List<Module> getAllModules(){
        //query the database and get all modules a particular student is enrolled for
        return modules; //return list of modules
  }
  public int getStatus(){
    int total = 0;
    int count = 0;
    for(Module m: getAllModules()){
        total += m.getMark();
        count++;
    }
    int average = total/count;
    return average;
  }
}
public class TuitionFee{
    private double tuitionFee;

    public void setTuitionFee(double tuitionFee){
        this.tuitionFee = tuitionFee;
    }
    public double getTuitionFee(){
        return tuitionFee;
    }
}
public interface TuitionFeeCalculator{
    public double calculate();
}
public class Discount70 implements TuitionFeeCalculator{
    @Override
    public double calculate(TuitionFee tuitionFee){
        double discount = tuitionFee * 0.7; //70% discount
        return tuitionFee-discount;
    }
}
public class Discount50 implements TuitionFeeCalculator{
    @Override
    public double calculate(TuitionFee tuitionFee){
        double discount = tuitionFee * 0.5; //50% discount
        return tuitionFee-discount;
    }
}
public class NoDiscount implements TuitionFeeCalculator{
    @Override
    public double calculate(TuitionFee tuitionFee){
        return tuitionFee; //no discount
    }
}

public class CalculatorSelectorFactory{
    TuitionFeeCalculator tfc;
    public CalculatorSelectorFactory(int status){
        if(status>=70){
          tfc=new Discount70();
        }
        else if(status>=50){
          tfc = new Discount50();
        }
        else{
          tfc = new NoDiscount();
        }       
    }
    public TuitionFeeCalculator getCalculator(){
        return tfc;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40693829

复制
相关文章

相似问题

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