所有。我被要求设计两个接口来模拟我们的里程表 在日常生活中看到。这是规范: 每个里程表由计数器轮组成。 这种轮计数器的例子包括:
1.二元里程表,其轮子各自显示0或1
2.桌面日期显示有三个轮子,每年一个,一个月和一天
3.一个骰子滚动显示器,其轮子每个都显示单个模具的斑点
为具有最多四个轮子的通用轮计数器编写Java接口。另外,为代表轮子的任何类编写Java接口。
我认为我已经正确设置了第一个界面(如果我误解了上述要求,请纠正我)。但我不知道如何设计代表车轮的界面。我认为我创建的WheelInterface足以用于里程表程序。请帮助我理解如何设计适合我需要的界面的要求。
import java.util.ArrayList;
public interface WheelInterface<T> {
/**Adds a @param wheelType to the @param wheels list
* @return true if the addition is successful and false if not
* wheels list (or number of wheels in the list) size must be
* over or equal to one and less or equal to four*/
public boolean addWheel(T wheelType, ArrayList<T> wheels);
/**updates a specified @param wheelType value
* if wheelType is numeric then increment the value
* if wheelType is a string then change the string value*/
public void increment(T wheelType);
/**updates a specified @param wheelType value
* if wheelType is numeric then decrement the value
* if wheelType is a string value then update the value*/
public void decrement(T wheelType);
/**resets the all wheelTypes in the wheels list*/
public void resetAll(ArrayList<T> wheels);
/**resets the specified wheelTypes in the wheels list*/
public void resetAll(ArrayList<T> wheels, int index);
/**Get the specified wheel from wheels*/
public T getWheel(ArrayList<T> wheels, int index);
/**Get all wheels*/
public ArrayList<T> getWheels();
/**Calculate all wheel values if the wheel types
* are numeric*/
public int wheelValues(ArrayList<T> wheels);
/**get wheel string values if the wheel types are strings*/
public String strWheelValues(ArrayList<T> wheels);
/**get wheel value if the wheel type is numeric */
public int wheelValue(T wheel);
/**get wheel value if the wheel type is a string */
public String strWheelValue(T wheel);
/**Get the number of wheels in this collection
* @return the size of the collection, (the number of wheels)*/
public int getSize();
}
答案 0 :(得分:0)
这就是我要开始的方式:首先,你需要一个Odometer
界面:
public interface Odometer {
List<Wheel> getWheels();
}
您需要Wheel
界面。
public interface Wheel {
int getValue(); // let’s deal with numerical values only
void increment();
void decrement();
}
这是你可以分支创建专用轮子的地方......你的里程表不需要知道这个。
public class BinaryWheel implements Wheel {
private boolean value;
@Override public int getValue() {
return value ? 1 : 0;
}
@Override public void increment() {
value ^= true; // toggle
}
@Override public void increment() {
increment(); // same thing, really!
}
}
public class YearWheel implements Wheel { … }
public class MonthWheel implements Wheel { … }
public class DayWheel implements Wheel { … }
public class DiceWheel implements Wheel { … }
如果您需要高级行为,即如果您在第1天递减时月轮需要减少,我会介绍一种了解轮子相互关系的模型。
但这基本上就是这样。这有帮助吗?