Use a SwitchTransformer
to apply a Transformer
that is dependent on a Predicate
. A
SwitchTransformer
models a switch
statement, and it takes three
parameters: an array of Predicate
instances, an array of Transformer
instances, and a default Transformer
.
Example 4-9 uses a SwitchTransformer
to apply a different
Transformer
implementation to odd and
even numbers.
Example 4-9. Using a SwitchTransformer
Transformer oddTransform = new Transformer( ) { public Object transform(Object input) { Integer number = new Integer( input ); return ( new Integer( number.intValue( ) * 2 ); } } Transformer evenTransform = new Transformer( ) { public Object transform(Object input) { Integer number = new Integer( input ); return ( new Integer( number.intValue( ) * 3 ); } } Predicate isEven = new Predicate( ) { public boolean evaluate(Object input) { Integer number = (Integer) input; return( number.intValue( ) % 2 == 0 ); } } Predicate isOdd = new NotPredicate(isEven); Predicate[] pArray = new Predicate[] { isOdd, isEven }; Transformer[] tArray = new Transformer[] { oddTransform, evenTransform }; Transform predicateTransform = new SwitchTransform( pArray, tArray, new NOPTransformer( ) ); Integer one = new Integer( 1 ); Integer two = new Integer( 2 ); Integer three = new Integer( 3 ); Integer four = new Integer( 4 ); System.out.println( "Transform of 1 = " + predicateTransform. transform( one ) ); System.out.println( "Transform of 2 = " + predicateTransform. transform( two ) ); System.out.println( "Transform of 3 = " + predicateTransform. transform( three ) ); System.out.println( "Transform of 4 = " + predicateTransform. transform( four ) );
If an object being transformed satisfies the isOdd
Predicate
, it is passed to the oddTransform
Transformer
. If an object being transformed
satisfies the isEven
Predicate
, it is passed to the evenTransform
Predicate
. If the object satisfies neither
Predicate
, it is passed to an
instance of NOPTransformer
, which is
a Transformer
implementation that
returns the object passed to transform(
)
:
Transform of 1 = 2 Transform of 2 = 6 Transform of 3 = 6 Transform of 4 = 12
The array of Predicate
instances and the array of Transformer
instances passed to the
constructor of SwitchTransformer
must
be of equal length. The SwitchTransformer
evaluates each of the
Predicate
instances in the array. If
a Predicate
evaluates to true
, the SwitchTransformer
retrieves the Transformer
that corresponds to the matching
Predicate
. If no Predicate
evaluates to true
, the SwitchTransformer
passes the object being
transformed to the third parameter—the default Transformer
. In Example 4-9, the default Transformer
was a NOPTransformer
, which is a Transformer
implementation that performs no
transformation and returns the object passed to transform()
. Figure 4-5 illustrates the SwitchTransformer
from the Solution; the two
Predicate
instances correspond to two
Transformer
instances.
Figure 4-5. A SwitchTransform with two Predicate instances, two Transformer instances, and a default Transformer