I suggest if you can come up with convincing reasons to extend Data class, you are ok. I did it without extending the Data class because I was able to come up with only the reasons below, which are not impressive:
1) Make the Data constructor protected and thereby forcing the programmer to create the Singleton instance of the sub class. But when you have to deal with more tables, the programmer has to remember to implement Singleton.
Instead you can create a server side Factory to make sure you create one instance of Data object for every table or db file.
2) It is possible for the Data object to delegate the value comparison during criteriaFind() to the sub class instance.
Instead you can check for the
String "any" in the CriteriaFind() method of the Data class. I think this is ok for the assignment.
You can also use ideas by Mark's earlier posting about criteriaFind(). If the user types "any" in any search fields, you pass blank values to the server and if all the fields have blank values, the search will bring all the records.
So after considerable thought, I decided to use a server side Factory to create only one instance of Data for each table or db file.