This class may be instantiated or subclassed by clients. However, in most
cases clients should instead instantiate or subclass the provided
concrete implementation of this model.
Note: This class/interface is part of an interim API that is still under development and expected to
change significantly before reaching stability. It is being made available at this early stage to solicit feedback
from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
(repeatedly) as the API evolves.