전략 패턴을 사용하여 다음 논리를 구현할 수 있습니까? 따라서 전체 학생의 성과를 기준으로 학비가 계산된다고 가정하십시오. 예를 들어 학생에게 전체 평균 점수가 70 점을 넘으면 학비는 70 %가 적게 듭니다. 평균 점수가 50 % 할인보다 높거나 다른 경우에는 할인이없는 경우에도 마찬가지입니다. 따라서 평균 점수에 따라 달라지는 할인 계산 방법에는 여러 가지가 있습니다. 이것을 Java 코드로 어떻게 구현할 수 있습니까? 평균 점수, 인터페이스 TuitionFeeCalculator 및 세 가지 전략 : 70persentDiscount, TuitionFeeCalculator를 구현하는 50 % 할인 및 noDiscount를 계산하는 메소드가있는 Student 클래스가 있다고 가정합니다.대학 인트라넷 시스템의 전략 설계 패턴 유스 케이스
답변
당신이 뭔가 간단한을위한 전략 패턴을 구현하지 않을 것 때문에 이것은 단지 수준의 운동을한다 가정하면,하지만 당신이 찾고있는 것은 무엇인가 같다 :
이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));
}
의 올바른 구현을 선택한다고 가정합니다. 그러나 전략 패턴의 올바른 사용법은 아닙니다. FeeCalculator는 Student의 멤버 여야합니다. – brummfondel
정말 중요하지 않지만, 그렇게하고 싶다면, TuitionFeeCalculator의 생성자 (그리고 tf 속성)의 double tuitionFee 매개 변수를 변경하고 student 클래스에 메소드를 작성하십시오. 아마도 calculate ()는 feeCalculator.calculateFee (fee) 메소드 호출을 수행합니다. – palako
나는 상관하지 않지만 그의 선생님은있을 수 있습니다. – brummfondel
누군가가이 코드를 확인하고 말해 수 무엇인가 잘못되었을 경우
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.7을 곱하면 70 %를 지불하고 70 %를 할인하지는 않습니다. 당신은 (1-0.7)을 곱해야합니다. – palako
- 1. 유스 케이스 다이어그램에서 인터페이스가 시스템의 일부가되어야합니까?
- 2. 유스 케이스 다이어그램 질문
- 3. 유스 케이스 단계 및 유스 케이스 시나리오
- 4. 유스 케이스 - 도움말
- 5. 유스 케이스 다이어그램에서 출력을 표현하는 방법
- 6. 유스 케이스 다이어그램 - 액터
- 7. 유스 케이스 다이어그램의 본질
- 8. 유스 케이스 모델링 도움이 필요하십니까?
- 9. UML 유스 케이스 다이어그램 - 컨텍스트
- 10. 유스 케이스 다이어그램 설명 - 유스 케이스 간의 관계 표시
- 11. 유스 케이스 스펙은 유스 케이스 설명 사용과 동일합니까?
- 12. 유스 케이스 튜토리얼
- 13. OpenID Connect 유스 케이스
- 14. 아무것도하지 않는 유스 케이스?
- 15. UML 유스 케이스 다이어그램
- 16. 유스 케이스 유물의 액터
- 17. MongoDB 유스 케이스 재고
- 18. UML 유스 케이스 다이어그램
- 19. 유스 케이스 다이어그램
- 20. 유스 케이스 알림
- 21. Node.js 비동기 유스 케이스
- 22. 유스 케이스 다이어그램에 포함
- 23. UML 유스 케이스 다이어그램
- 24. mercurial 유스 케이스 솔루션
- 25. 유스 케이스 다이어그램의 CRUD?
- 26. Amazon Lambda 유스 케이스
- 27. memcached 유스 케이스
- 28. 개인 변경을위한 유스 케이스
- 29. 유스 케이스 관계
- 30. 다음 유스 케이스 다이어그램이 맞습니까?
당신은 무엇을 시도 했습니까? – developer
uml 다이어그램을 작성하려고하지만 클래스를 작성해야하는지 명확하게 이해하지 못합니다. Simple Factory를 사용하여 TuitionFeeCalculator – FPQ