我可以使用策略模式来实现以下逻辑:因此,假设学费是根据学生的整体表现来计算的,例如,如果学生的总体平均分数超过70分,他的学费将减少70%。以此类推..如果平均分数低于50%,其他情况下则不打折。因此,有不同的策略来计算折扣,这取决于平均分数。如何在Java代码中实现这一点?我认为学生类将有计算平均分数的方法,接口TuitionFeeCalculator和三个策略:70%折扣,50%折扣和noDiscount实现TuitionFeeCalculator。
发布于 2016-11-19 22:35:03
假设这只是一个课堂练习,因为您永远不会为这么简单的事情实现策略模式,但您正在寻找的内容如下:
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));
}发布于 2016-11-19 23:31:51
有没有人能检查一下这个代码,告诉我有没有什么问题
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;
}
}https://stackoverflow.com/questions/40693829
复制相似问题