Design Patterns Java™ Workbook

(Michael S) #1
Chapter 12. Chain of Responsibility

package com.oozinoz.applications;
import com.oozinoz.machine.*;
public class AmbitiousMenu
{
public Engineer getResponsible(SimulatedItem item)
{
if (item instanceof Tool)
{
Tool t = (Tool) item;
return t.getToolCart().getResponsible();
}


if (item instanceof MachineComponent)
{
MachineComponent c = (MachineComponent) item;
if (c.getResponsible() == null)
{
if (c.getParent() != null)
{
return c.getParent().getResponsible();
}
}
}
return null;
}
}


You can clean up this code by applying the CHAIN OF RESPONSIBILITY pattern.


CHALLENGE 12.2


Redraw the diagram in Figure 12.1, moving getResponsible() to
SimulatedItem and adding this behavior to Tool.

The client code is a lot simpler if it can ask any selectable item for its responsible engineer:


public Engineer getResponsible(SimulatedItem item)
{
return item.getResponsible();
}


The implementation of getResponsible() for each item is simpler, too.


CHALLENGE 12.3


Write getResponsible() for:

A. MachineComponent
B. Tool
C. ToolCart
Free download pdf