|
Evaluating Software Design Patterns — the "Gang of Four" patterns implemented in Java 6 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectdk.rode.thesis.decorator.SequenceDecorator<E>
E
- The type of values delivered by this sequence.@ParticipantUsage(value={"Component","ConcreteComponent"}, type=Sequence.class) @Participant(value="Decorator") public abstract class SequenceDecorator<E>
A sequence decorator is a decorator that forwards all
request to the decorated Sequence
without performing
additional operations except for toString()
.
Sub-classes can override current()
and next()
to
add functionality, but must implement Sequence.copy()
.
A sequence decorator exhibit the same bounded
,
consistent
, and unique
properties as the decorated sequence.
The default stringable policy used is DecoratedPolicy.VISIBLE
.
Implementation notes:
The decorated sequence must have the exact same type parameter, E
,
and not <? extends E>
is not allowed. To facilitate different
type parameters, the Adapter pattern
can be used.
Nested Class Summary |
---|
Nested classes/interfaces inherited from interface dk.rode.thesis.meta.model.Sequence |
---|
Sequence.State |
Field Summary | |
---|---|
private StringablePolicy<Sequence<?>> |
policy
The default sequence policy used for formatting. |
(package private) Sequence<E> |
sequence
The decorated sequence. |
Constructor Summary | |
---|---|
protected |
SequenceDecorator(Sequence<E> sequence)
Constructor, which creates this decorator to decorate the Sequence supplied as sequence . |
protected |
SequenceDecorator(Sequence<E> sequence,
StringablePolicy<Sequence<?>> policy)
Constructor, which creates this decorator to decorate the Sequence supplied as sequence and
use the default stringable policy supplied as policy . |
Method Summary | |
---|---|
boolean |
bounded()
Returns true if this sequence is bounded, i.e. |
boolean |
consistent()
Returns true if this sequence is consistent, i.e. deliver the same values, in order, after restart or reset . |
E |
current()
Returns the current element from this sequence. |
boolean |
equals(Object object)
|
protected Sequence<E> |
getSequence(boolean copy)
Returns a copy of the decorated sequence if copy is true, otherwise the decorated
sequence it self. |
StringablePolicy<? super Sequence<E>> |
getStringablePolicy(StringablePolicy<? super Sequence<E>> policy)
Always return a non-null policy: policy is not null: policy is returned. |
int |
hashCode()
|
E |
next()
Returns the next element from this sequence. |
void |
reset()
Resets this sequence to start over if it is consistent. |
Sequence.State |
state()
Returns the internal state of this sequence. |
String |
toString()
|
CharSequence |
toString(StringablePolicy<? super Sequence<E>> policy)
Returns a char sequence representation of this stringable object using the format determined by policy or the
default policy
in case policy is null. |
boolean |
unique()
Returns true if this sequence deliver a given sequence value at most one time until reset or restarted. |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface dk.rode.thesis.meta.model.Sequence |
---|
copy |
Field Detail |
---|
private final StringablePolicy<Sequence<?>> policy
Can be null, in which case the default policy of decorated sequence is used.
final Sequence<E> sequence
Never null.
Constructor Detail |
---|
protected SequenceDecorator(@Participant(value="Component") Sequence<E> sequence)
Sequence
supplied as sequence
.
The default stringable policy used is DecoratedPolicy.VISIBLE
.
sequence
- The sequence; cannot be null.
NullPointerException
- If sequence
is null.protected SequenceDecorator(@Participant(value="Component") Sequence<E> sequence, StringablePolicy<Sequence<?>> policy)
Sequence
supplied as sequence
and
use the default stringable policy supplied as policy
.
sequence
- The sequence; cannot be null.policy
- The default policy; can be null.
NullPointerException
- If sequence
is null.Method Detail |
---|
public boolean bounded()
Sequence
The same type of sequence may represent both bounded and
unbounded sequences and the behaviour is determined and fixed
at construction time.
Bounded sequences will restart if they deliver
consistent
values.
bounded
in interface Sequence<E>
Sequence.unique()
public boolean consistent()
Sequence
reset
.
Only bounded
consistent sequences will restart.
Consistent sequences need not deliver unique
sequence values.
Instances of the same type of sequences are always consistent or inconsistent; it is determined at design time, not construction time.
consistent
in interface Sequence<E>
public E current()
Sequence
This method can be invoked even if Sequence.next()
has not been invoked yet, thus delivering the initial
value of this sequence.
current
in interface Sequence<E>
public boolean equals(Object object)
equals
in class Object
protected Sequence<E> getSequence(boolean copy)
copy
is true, otherwise the decorated
sequence it self.
copy
- True to return a copy of the decorated sequence,
false to return a reference to the sequence.
copy
is true; never null.public StringablePolicy<? super Sequence<E>> getStringablePolicy(StringablePolicy<? super Sequence<E>> policy)
Stringable
policy
is not null: policy
is returned.
policy
is null: a default, non-null policy is returned.
getStringablePolicy
in interface Stringable<Sequence<E>>
policy
- The supplied policy; can be null.
Stringable.toString(StringablePolicy)
public int hashCode()
hashCode
in class Object
public E next()
Sequence
next
in interface Sequence<E>
Sequence.current()
,
Sequence.state()
public void reset()
Sequence
If this sequence is consistent
, the
sequence will restart.
reset
in interface Sequence<E>
public Sequence.State state()
Sequence
state
in interface Sequence<E>
public String toString()
toString
in class Object
public CharSequence toString(StringablePolicy<? super Sequence<E>> policy)
Stringable
policy
or the
default
policy
in case policy
is null.
In Foo
, a typical implementation of this method
could be:
public CharSequence toString(StringablePolicy<? super Foo> policy) { return this.There are two approaches to formatting this stringable object into a char sequence representation:getStringablePolicy
(policy).toString
(this); }
policy
decide the entire format,
as in the Foo
example above; or
policy
to format part of the overall
representation, for example letting this method append
certain text regardless of the policy used.
StringablePolicy.toString(Object)
method, for
example in case multiple stringable objects should be formatted
into an overall representation.
In case an implementation uses the approach from bullet 2), care
must be take to respect the policy hints
so the overall format remains meaningful.
toString
in interface Stringable<Sequence<E>>
policy
- The policy to dictate the formatting; can be null, in
which case the result of toString
method
is returned.
StringablePolicy.Type
public boolean unique()
Sequence
reset
or restarted.
Unbounded
sequences that are unique will never
deliver the same sequence value more than once.
The same type of sequence may represent both unique and not unique sequences and the behaviour is determined and fixed at construction time.
unique
in interface Sequence<E>
Sequence.consistent()
|
Gunni Rode / rode.dk | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |