设计两个接口来模拟真实的里程表

时间:2016-02-07 06:20:51

标签: java interface

所有。我被要求设计两个接口来模拟我们的里程表   在日常生活中看到。这是规范:    每个里程表由计数器轮组成。    这种轮计数器的例子包括:

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();

}

1 个答案:

答案 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天递减时月轮需要减少,我会介绍一种了解轮子相互关系的模型。

但这基本上就是这样。这有帮助吗?