posted 14 years ago
When an object receives a request, the object can either handle the request itself or pass the request on to a second object to do the work. If the object decides to pass the request on, you say that the object has forwarded responsibility for handling the request to the second object.
The following Stack class provides a simple example of composition and forwarding:
public class Stack {
private java.util.ArrayList list;
public Stack() {
list = new java.util.ArrayList();
}
public boolean empty() {
return list.isEmpty();
}
public Object peek() {
if( !empty() ) {
return list.get( 0 );
}
return null;
}
public Object pop() {
if( !empty() ) {
return list.remove( 0 );
}
return null;
}
public Object push( Object item ) {
list.add( 0, item );
return item;
}
}
Through composition, Stack holds on to an ArrayList instance. As you can see, Stack then forwards the requests to the ArrayList instance. Simple composition and request forwarding (such as that of the Stack class presented above) is often mistakenly referred to as delegation.