Use ChainedClosure
to create a chain of
Closure
instances that appears as a single
Closure
. A
ChainedClosure
takes an array of Closure
objects and passes the
same object sequentially to each Closure
in the
chain. This example sends an object through a
ChainedClosure
containing two stages that modify
different properties on the object:
Closure fuel = new Closure( ) { public void execute(Object input) { Shuttle shuttle = (Shuttle) input; shuttle.setFuelPercent( 100.0 ); } } Closure repairShielding = new Closure( ) { public void execute(Object input) { Shuttle shuttle = (Shuttle) input; shuttle.setShieldingReady( true ); } } Closure[] cArray = new Closure[] { repairShielding, fuel }; Closure preLaunch = new ChainedClosure( cArray ); Shuttle endeavour = new Shuttle( ); endeavour.setName( "Endeavour" ); System.out.println( "Shuttle before preLaunch: " + shuttle ); preLaunch.execute( endeavour ); System.out.println( "Shuttle after preLaunch: " + shuttle );
A Shuttle
object is passed through a
ChainedClosure
, preLaunch
,
which consists of the stages fuel
and
repairShielding
. These two
Closure
objects each modify the internal state of
the Shuttle
object, which is printed out both
before and after the execution of the preLaunch
Closure
:
Shuttle before preLaunch: Shuttle Endeavour has no fuel and no shielding. Shuttle before preLaunch: Shuttle Endeavour is fueled and is ready for reentry.
This example should remind you of Recipe 4.11. When chaining Transformer
objects, the result of each transformation is passed between
stages—the results of stage one are passed to stage two, the
results of stage two are passed to stage three, and so on. A
ChainedClosure
is different; the same object is
passed to each Closure
in sequence like a car
moving through a factory assembly line.
Jakarta Commons Functor in the Commons Sandbox introduces a
UnaryProcedure
interface that is equivalent to
Closure
. Two or more
UnaryProcedure
instances can be chained together
using the CompositeUnaryProcedure
class. For more
information about CompositeUnaryProcedure
, see the
Commons Functor page at http://jakarta.apache.org/commons/sandbox/functor.
18.221.89.18