Subtype dependency on corresponding subtypes
Hi All,
I have a design question.
I am writing an application that will search through the contents of
various files against a given search criteria. I envisage that there
will be different search strategies, each of which have different
search criteria. A couple of examples would be as per below.
Plain Text Strategy. Criteria: a single string (search term), case
sensitive flag.
Regular Expression Strategy: a single regular expression, number of
lines before and after each result to include, case sensitive flag.
XML Strategy: a single string (search term), name of the xml element
to be searched within.
I envisage having an abstract search type and concrete subclasses
based on each strategy. For example:
public interface Search {
SearchResult search(SearchCriteria criteria);
}
public class PlainTextSearchStrategy implements Search {
public SearchResult search(SearchCriteria criteria) {
// do the search..
}
}
public class RegularExpressionSearchStrategy implements Search
{ ... }
public class XmlSearchStrategy implements Search { ... }
My difficulty is the SearchCriteria. Each search strategy type would
have its own search criteria type and I do not think there is any
common behaviour (or data) that can be defined in the criteria super
type. As such, SearchCriteria is just a marker interface, and this
bothers me. The search strategy sub-types would need to cast
SearchCriteria to the specific type they need, so there is no type
safety beyond ensuring the marker interface is implemented. For
example:
public class PlainTextSearchStrategy implements Search {
public SearchResult search(SearchCriteria criteria) {
PlainTextSearchCriteria ptCriteria = (PlainTextSearchCriteria)
criteria;
// do the search..
}
}
Is there a design better suited to this problem of ensuring a sub-type
can rely on corresponding subtypes being present? As I understand it,
generics won't help me here either. Do I need to live with the
casting?
Any advice would be much appreciated!
Rob
:)