The StrategyFactory service is used to create a service implementation based on a service interface and a number of strategies implementing that interface.
By default, the class of the first parameter of each method is used to select the correct strategy instance to delegate the method invocation to. This can be overridden by using the "parameter-index" (the first parameter index is 0) attribute on the <construct> element.
The class-to-strategy lookup understands inheritance. If an exact match for a class is not found, then the search works up the inheritance chain. First, it checks all the super-classes, working upwards, but skipping java.lang.Object. It then searches all the interfaces directly or indirectly implemented by the search class. Finally, java.lang.Object is checked. It is an exception if no match is found (so you should almost always include a strategy for java.lang.Object).
The factory expects a single parameter element:
<construct configuration-id="..."/>
The
configuration-id
is the id of the companion
configuration (used to define classes and strategies).
Each srevice constructed by StrategyFactory must have a configuration, into which strategies are contributed:
<configuration-point id="..." schema-id="gaderian.utilitiesStrategyRegistry"/>
Contributions into the configuration are used to specify classes to match, and the corresponding strategy to use.
<strategy class="..." object="..."/>
Contributes a strategy. The
class
attribute defines the class to match against, the
object
attribute provides the actual strategy object (which must implement the service
interface).