From the perspective of GUI design, the critical issue in developing a model is defining the interface for manipulating the model. This interface should be as transparent as possible, without making a commitment to a particular user interface.
In our click counter example program, the model class is utterly trivial. In accordance with the model-view-controller pattern, it is does not presume any particular user interface. The only feature of the counter targeted at supporting a user interface is the toString method which pads the output String with leading zeroes to produce the specified display width of 3 digits.
class ClickCounter { // ** fields ** private static final int MAXIMUM = 999; private static final int MINIMUM = 0; private static final int STRING_WIDTH = 3; private static int count = MINIMUM; // ** constructor public ClickCounter() {} // ** methods public boolean isAtMinimum() { return count == MINIMUM; } public boolean isAtMaximum() { return count == MAXIMUM; } public int inc() { if (! this.isAtMaximum()) count++; return count; } public int dec() { if (! this.isAtMinimum()) count--; return count; } public void reset() { count = MINIMUM; } public int getCount() { return count; } // ** toString() ** public String toString() { StringBuffer buffer = new StringBuffer(Integer.toString(count)); while (buffer.length() < STRING_WIDTH) buffer.insert(0,0); return buffer.toString(); } }