2016-11-19 1 views
0

전략 패턴을 사용하여 다음 논리를 구현할 수 있습니까? 따라서 전체 학생의 성과를 기준으로 학비가 계산된다고 가정하십시오. 예를 들어 학생에게 전체 평균 점수가 70 점을 넘으면 학비는 70 %가 적게 듭니다. 평균 점수가 50 % 할인보다 높거나 다른 경우에는 할인이없는 경우에도 마찬가지입니다. 따라서 평균 점수에 따라 달라지는 할인 계산 방법에는 여러 가지가 있습니다. 이것을 Java 코드로 어떻게 구현할 수 있습니까? 평균 점수, 인터페이스 TuitionFeeCalculator 및 세 가지 전략 : 70persentDiscount, TuitionFeeCalculator를 구현하는 50 % 할인 및 noDiscount를 계산하는 메소드가있는 Student 클래스가 있다고 가정합니다.대학 인트라넷 시스템의 전략 설계 패턴 유스 케이스

+0

당신은 무엇을 시도 했습니까? – developer

+0

uml 다이어그램을 작성하려고하지만 클래스를 작성해야하는지 명확하게 이해하지 못합니다. Simple Factory를 사용하여 TuitionFeeCalculator – FPQ

답변

1

당신이 뭔가 간단한을위한 전략 패턴을 구현하지 않을 것 때문에 이것은 단지 수준의 운동을한다 가정하면,하지만 당신이 찾고있는 것은 무엇인가 같다 :

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)); 
} 
+0

의 올바른 구현을 선택한다고 가정합니다. 그러나 전략 패턴의 올바른 사용법은 아닙니다. FeeCalculator는 Student의 멤버 여야합니다. – brummfondel

+0

정말 중요하지 않지만, 그렇게하고 싶다면, TuitionFeeCalculator의 생성자 (그리고 tf 속성)의 double tuitionFee 매개 변수를 변경하고 student 클래스에 메소드를 작성하십시오. 아마도 calculate ()는 feeCalculator.calculateFee (fee) 메소드 호출을 수행합니다. – palako

+0

나는 상관하지 않지만 그의 선생님은있을 수 있습니다. – brummfondel

0

누군가가이 코드를 확인하고 말해 수 무엇인가 잘못되었을 경우

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

괜찮습니다. 그러나 어떻게 할인을 계산하는지 조심하십시오. 0.7을 곱하면 70 %를 지불하고 70 %를 할인하지는 않습니다. 당신은 (1-0.7)을 곱해야합니다. – palako