Appendix B. Solutions
Composite (Chapter 5)..............................................................................................................................
SOLUTION 5.1.......................................................................................................................................
One answer is that Design Patterns (Gamma et al. 1995) shows Component as an abstract
class, so Java developers may implement it that way without considering the use of a Java
interface. Another answer is that the Component superclass often has fields and methods that
its subclasses can share. For example, the Component class may have a name instance
variable and a concrete toString() method that uses it.
SOLUTION 5.2.......................................................................................................................................
For the Machine class, getMachineCount() should be something like:
public int getMachineCount()
{
return 1;
}
The class diagram shows that MachineComposite uses a List object to track its
components. To count the machines in a composite, you might write:
public int getMachineCount()
{
int count = 0;
Iterator i = components.iterator();
while (i.hasNext())
{
MachineComponent mc = (MachineComponent) i.next();
count += mc.getMachineCount();
}
return count;
}
SOLUTION 5.3.......................................................................................................................................
Method Class Definition
getMachineCount() MachineCompositeReturn the sum of the counts for each
component in components.
Machine Return 1.
isCompletelyUp() MachineCompositeReturn if all components are "completely up."
(^) Machine Return true if this machine is up.
stopAll() MachineCompositeTell all components to "stop all."
Machine Stop this machine.
getOwners() MachineCompositeCreate a set, not a list, add the owners of all
components, and return the set.
Machine Return this machine's owners.
getMaterial() MachineCompositeReturn a collection of all the material on
components.
Machine Return the material that is on this machine.