The purpose of this exercise is to give you practice with implementing the Model component of the Model-View-Controller design pattern.
In the starter code, you are given an interface representing a game of Tic Tac Toe; your task is to implement the TicTacToe interface.
You will need to define an enum Player, representing the players (X and O), with a toString() method that returns "X" and "O" accordingly. You will need to implement the public class named TicTacToeModel, with a single public constructor that takes no arguments. The class definition, with a toString() implementation to help with debugging, are provided to you in the starter code. You will fill in the fields and remaining method definitions as appropriate. You may also define other classes at your option as needed.
The game grid cells are numbered by row and column starting from 0. For example, the upper left position is row 0, column 0 (or  in the 2D array returned by getBoard()), the upper middle position is row 0, column 1 (), the lower right is .
We have supplied you with some basic JUnit tests as part of the starter code. Use these to verify that your implementation is correct, and write additional tests of your own.
· Avoid duplicating code as much as possible. Consider using non-public methods as means of creating reusable pieces of functionality.
· Be sure to use access modifiers, private and public, as well as final, appropriately.
· In your getters, be careful to return a copy of, and not a direct reference to, any mutable internal state in your model.
· Include JavaDoc for your classes and constructors as appropriate. You do not need to repeat JavaDoc already existing in a superclass or interface when you override a method.