public interface ServiceManager
ServiceManager
selects Object
s based on a
role. The contract is that all the Object
s implement the
differing roles and there is one Object
per role. If you
need to select on of many Object
s that implement the same
role, then you need to use a ServiceSelector
. Roles are
usually the full interface name.
A role is better understood by the analogy of a play. There are many
different roles in a script. Any actor or actress can play any given part
and you get the same results (phrases said, movements made, etc.). The exact
nuances of the performance is different.
Below is a list of things that might be considered the different roles:
ServiceManager
does not specify the methodology of
getting the Object
, merely the interface used to get it.
Therefore the ServiceManager
can be implemented with a
factory pattern, an object pool, or a simple Hashtable.Serviceable
,
ServiceSelector
Modifier and Type | Method and Description |
---|---|
boolean |
hasService(java.lang.String key)
Check to see if a
Object exists for a key. |
java.lang.Object |
lookup(java.lang.String key)
Get the
Object associated with the given key. |
void |
release(java.lang.Object object)
Return the
Object when you are finished with it. |
java.lang.Object lookup(java.lang.String key) throws ServiceException
Object
associated with the given key. For
instance, If the ServiceManager
had a
LoggerComponent
stored and referenced by key,
the following could be used:
try { LoggerComponent log; myComponent = (LoggerComponent) manager.lookup( LoggerComponent.ROLE ); } catch (...) { ... }
key
- The lookup key of the Object
to retrieve.Object
valueServiceException
- if an error occursboolean hasService(java.lang.String key)
Object
exists for a key.key
- a string identifying the key to check.void release(java.lang.Object object)
Object
when you are finished with it. This
allows the ServiceManager
to handle the End-Of-Life Lifecycle
events associated with the Object
. Please note, that no
Exception should be thrown at this point. This is to allow easy use of the
ServiceManager system without having to trap Exceptions on a release.object
- The Object
we are releasing.