如何实现接口?

时间:2013-06-19 02:00:31

标签: java interface code-organization

我对java非常陌生并且让我的脚变得有点湿我试图为我和我的妻子建立一个简单的预算计划。我有很多课程,我还在学习组织,但我对这个主题的主要问题是关于我的界面。

看起来像这样:

package com.budgeter;

public interface Category {

void setPersonalLoan(int budget);
void setDonationsGifts(int budget);
void setRecreation(int budget);
void setHouseHoldItems(int budget);
void setUtilities(int budget);
void setSavings(int budget);
void setGroceries(int budget);
void setAutoInsurance(int budget);
void setAutoPayment(int budget);
void setHomeInsurance(int budget);
void setHomePayment(int budget);

}

我不知道这个界面是否按照最佳实践完成,但我的目标是找到一套定义的类别。接下来,我有另一个名为BillCategory的类,我可以使用它来添加自定义类别。同样,不确定这是否是使用接口的正确方法。

所以我这样使用这个界面:

package com.budgeter;

public class Bills implements Category {

private Double amount;
private Double totalBills;

public Bills() {}
public Bills(double amount) {
    setTotal(amount);
}

private void setTotal(Double amount) {
    this.amount = amount;
    totalBills = amount;
}

public Double getTotal() {
    return totalBills;
}
@Override
public void setPersonalLoan(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setDonationsGifts(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setRecreation(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setHouseHoldItems(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setUtilities(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setSavings(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setGroceries(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setAutoInsurance(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setAutoPayment(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setHomeInsurance(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setHomePayment(int budget) {
    // TODO Auto-generated method stub

}
}

这是我的BillCategory类,我用它来添加一个新类别,但不完全确定如何将它与我的界面联系起来:

package com.budgeter;

import java.util.HashMap;
import java.util.Map;

public class BillCategory {

private static Map<String, Integer> categories = new HashMap<String, Integer>();

public void addCategory(String categoryName, int frequency) {
    categories.put(categoryName, frequency);
}

public Map<String, Integer> getCategories() {
    return categories;
}

}
  • 检查项目是否已设置的最有效方法是什么,然后为getTotal()方法计算所有项目?
  • 我是否正确使用了界面?
  • 我使用了一个好的命名约定(例如Category)吗?
  • setTotalAmount()方法我不确定是否应该将引用传递给amount或使用amount设置this.amount = amount然后全局访问它。这是最好的做法吗?
  • BillCategory类与界面相关联的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我建议您界面的唯一方法是在方法声明中添加某种可见性(public, private, protected)。您在实现中有这个但不在界面中。实现中的代码看起来很好,只是两个变量似乎在做同样的事情。我不知道我是否完全理解你为什么称它为Category但是大写的接口名称在java中是很好的约定。

在set方法中,你可以完成你所做的this.amount = amount,从构造函数中调用该方法是很好的做法。

关于第一个问题,如果为每个set方法添加一个类变量,只需将该变量设置为传入的值,那么可以在getTotal()方法中累加总数并返回该值。

private int personalLoan;
private int donationGifts;
private int recreation;
private int houseHoldItems;
...

@Override
public void setPersonalLoan(int budget) {
    this.personalLoan = budget;
}
@Override
public void setDonationsGifts(int budget) {
    this.donationGifts = budget;
}
@Override
public void setRecreation(int budget) {
    this.recreation = budget;
}
@Override
public void setHouseHoldItems(int budget) {
    this.houseHoldItems = budget;
}
...


public double getTotal() {
    double total = personalLoan + donationGifts + recreation + houseHoldItems + utilities + savings + groceries....
    return total;
}

您还可以在构造函数中将所有这些变量作为参数进行设置,并使用这些方法设置它们,而不是为您的总数设置一个值。

注意我确实发现您的预算为int's,因此您的预算不能包含小数值。您可能希望在界面中更改它,然后返回getTotal()的双精度更有意义。