|
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.bridge.SequenceValueCollection<E,C>
dk.rode.thesis.bridge.SequenceValueSet<E,C>
E
- The type of serializable values stored in this value set.C
- The type of set storing the values in this value set.@Participant(value="Implementor") public abstract class SequenceValueSet<E extends Serializable,C extends Set<E>>
A sequence value set stores sequence values in a specific
java.util.Set
implementation as specified by the
type parameter C
.
Implementation notes:
The get(int)
and numberOf(Serializable, int)
methods
are not fast. They have a worst-case running time proportional to the
number of elements, n, in the value set, i.e. O(n). However,
numberOf
can quickly deduce if a given value is contained in
the value set or not based on a hash lookup. For these simple classes,
this implementation is deemed adequate.
Field Summary | |
---|---|
private Iterator<E> |
iterator
The current iterator used to deliver the next value in first() , get() , or get(int) . |
Fields inherited from class dk.rode.thesis.bridge.SequenceValueCollection |
---|
number, type, values |
Constructor Summary | |
---|---|
protected |
SequenceValueSet(Class<E> type,
C values,
int number)
Constructor, which creates this sequence value set to use the java.util.Set instance supplied as values . |
Method Summary | |
---|---|
boolean |
duplicates()
Returns false. |
E |
first()
Resets this generator to re-generate its first value, where after values can (again) be generated by SequenceValueGenerator.get() . |
E |
get()
Returns a value generated by this generator. |
E |
get(int number)
Returns the number 'th value generated by this generator,
which may or may not have been generated yet. |
private E |
next(Iterator<E> iterator,
int count)
Helper method that will call next() count
times on iterator . |
int |
numberOf(E value,
int fromNumber)
Returns the number of the generated value supplied as value
using an offset of fromNumber , or Const.EOF if no
such value will ever been generated by this generator. |
Methods inherited from class dk.rode.thesis.bridge.SequenceValueCollection |
---|
checkNumber, copy, equals, getStringablePolicy, getValueType, hashCode, number, size, toCollection, toString, toString |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface dk.rode.thesis.bridge.SequenceValueGenerator |
---|
ordered, sorted |
Field Detail |
---|
private Iterator<E extends Serializable> iterator
first()
, get()
, or get(int)
. Never null.
Constructor Detail |
---|
protected SequenceValueSet(Class<E> type, C values, int number)
java.util.Set
instance supplied as values
.
The actual type of values
is determined by the type
parameter C
.
The next value to return by get()
is the value that
is the number
'th value in this value set, and
this constructor ensures that this value set is initialised
accordingly!
Modifying values
externally will affect this
value set and should not be performed. The result
of doing so is undefined - but never good.
type
- The type of values stored in this set (and
values
); cannot be null.values
- The actual Set
instance storing the sequence
values; cannot be null, empty, or contain null values.number
- The number pointing the the number
'th value
to be returned by the next call to get()
.
NullPointerException
- If either argument is null.
IllegalArgumentException
- If values
is empty,
contain a null value, or if number
is illegal.Method Detail |
---|
public final boolean duplicates()
public final E first()
SequenceValueGenerator
SequenceValueGenerator.get()
.
The number
of generated values is reset when
this method is invoked.
If this generator does not generate ordered
, nor
sorted
values, it is undefined which value is
generated as the first value.
public final E get()
SequenceValueGenerator
The number of the generated value is one higher than the last
value returned by either SequenceValueGenerator.first()
, SequenceValueGenerator.get()
,
or SequenceValueGenerator.get(int)
.
The number
of generated values is reset
when first()
is invoked.
If this generator generates ordered
or
sorted
values, the generation of values
is consistent even after SequenceValueGenerator.first()
have been invoked.
Otherwise the order is undefined.
SequenceValueGenerator.get(int)
public final E get(int number)
SequenceValueGenerator
number
'th value generated by this generator,
which may or may not have been generated yet. The next call to
SequenceValueGenerator.get()
from generate and return the number + 1
'th
value.
The number
of generated values is reset
when first()
is invoked.
If this generator generates ordered
or
sorted
values, the generation of values is
consistent even after SequenceValueGenerator.first()
have been invoked. Otherwise
the order is undefined, and this method may generate
different values for the same number each time invoked.
number
- The number in question; cannot be zero or negative.
Is one-, not zero-based!
number
'th value generated by this generator;
never null.SequenceValueGenerator.get()
,
SequenceValueGenerator.numberOf(Object, int)
private final E next(Iterator<E> iterator, int count)
next()
count
times on iterator
.
iterator
- The iterator; never null.count
- The number of times to call next()
.
next()
; never null.public int numberOf(E value, int fromNumber)
SequenceValueGenerator
value
using an offset of fromNumber
, or Const.EOF
if no
such value will ever been generated by this generator.
Unlike SequenceValueGenerator.first()
, SequenceValueGenerator.get()
, and SequenceValueGenerator.get(int)
, this
method will not alter the number of values generated by this
generator.
value
- The value to test; cannot be null.fromNumber
- The number to start from; only relevant if the
values generated contain duplicates
. Is one-, not zero-based! If
larger than SequenceValueGenerator.size()
, this method will
always return EOF
.
value
,
or EOF
if no such value can be generated by
this value generator.SequenceValueGenerator.get(int)
|
Gunni Rode / rode.dk | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |