我可以使用策略模式來實現以下邏輯: 所以,想象學費是根據學生的整體表現來計算的,例如,如果學生有一個整體平均分大於70分,他的學費將減少70%。依此類推。如果平均分爲50折優惠,其他情況下不予折扣。所以有不同的策略來計算折扣,這取決於平均分。 如何在Java代碼中實現這一點? 我想會有學生類,將有方法來計算平均分,界面TuitionFeeCalculator和三種策略:70persentDiscount,50%的折扣和noDiscount實施TuitionFeeCalculator。策略設計模式在大學內聯網系統開發中的使用案例
回答
假定這只是一類的運動,因爲你永遠不會實現一個策略模式的東西簡單,但你正在尋找的是這樣的:
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必須是學生的成員。 – brummfondel
它並不重要,但如果你想這樣做,只需要改變TuitionFeeCalculator的構造函數的double tuitionFee參數(和tf屬性),並在學生類中創建一個方法,也許稱爲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. PHP網站開發設計策略
- 2. 新的設計模式/設計策略
- 3. 策略設計模式
- 4. Multipe策略設計模式
- 5. 在策略模式中設置策略
- 6. MEF中的設計模式策略
- 7. 設計模式 - 策略模式
- 8. 策略設計模式中不同具體策略之間的依賴關係?
- 9. 我的案例是否使用策略或命令模式?
- 10. 使用Hibernate命名策略生成模式的案例更改
- 11. 內聯網系統
- 12. 如何實施策略設計模式?
- 13. C#策略模式設計問題
- 14. 嵌套策略設計模式
- 15. Javascript策略設計模式問題
- 16. OpenCart模板設計策略
- 17. 策略設計模式 - 在計數器策略之間進行選擇
- 18. Akka Supervisor策略 - 正確使用案例
- 19. 學習系統設計
- 20. C#/ Web開發學習策略
- 21. 策略使用IOC容器的設計模式 - Ninject專門爲
- 22. 網頁開發設計模式列表?
- 23. 在phantomjs中使用策略模式
- 24. 遊戲設計中的組件模型與策略模式
- 25. 策略設計模式(使用參數方法) - JAVA
- 26. 如何設計學校賬單系統數據庫模式?
- 27. 設計模式 - 策略與橋樑(重疊設計)
- 28. Java中使用策略模式的Emailer
- 29. C++內聯模板策略功能
- 30. 好的設計模式系統重寫?
你試過了什麼? – developer
我想組成uml圖,但我不清楚應該創建什麼類。我想我可能會使用Simple Factory來選擇正確的TuitionFeeCalculator實現 – FPQ