public interface StrategyRegistry
Strategies are registered before they can be used; the registration maps a particular class to a strategy instance. The strategy instance will be used when the subject class matches the registered class, or the subject class inherits from the registered class.
This means that a search must be made that walks the inheritance tree (upwards from the subject class) to find a registered mapping.
In addition, strategies can be registered against interfaces. Searching of interfaces occurs after searching of classes. The exact order is:
The first match terminates the search.
The StrategyRegistry caches the results of search; a subsequent search for the same subject class will be resolved immediately.
StrategyRegistry does a minor tweak of the "natural" inheritance. Normally, the parent class of
an object array (i.e., Foo[]
) is simply Object
, even though you
may assign Foo[]
to a variable of type Object[]
. StrategyRegistry
"fixes" this by searching for Object[]
as if it was the superclass of any object
array. This means that the search path for Foo[]
is Foo[]
,
Object[]
, then a couple of interfaces Cloneable
,
Serializable
, etc. that are implicitily implemented by arrays), and then,
finally, Object
This tweak doesn't apply to arrays of primitives, since such arrays may not be
assigned to Object[]
.
StrategyRegistryImpl
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
getStrategy(java.lang.Class subjectClass)
Gets the stategy object for the specified subjectClass.
|
void |
register(java.lang.Class registrationClass,
java.lang.Object strategy)
Registers an adapter for a registration class.
|
void register(java.lang.Class registrationClass, java.lang.Object strategy)
java.lang.IllegalArgumentException
- if a strategy has already been registered for the given class.java.lang.Object getStrategy(java.lang.Class subjectClass)
java.lang.IllegalArgumentException
- if no strategy could be found.