Jump to Menu

Chain of Responsibility Pattern Tutorial

This tutorial is aimed to guide the definition and application of Gang of Four (GoF) chain of responsibility design pattern. By reading this tutorial, you will know how to develop a model for the chain of responsibility pattern, and how to apply it in practice.

Compatible edition(s): Enterprise, Professional, Standard

  • October 14, 2009
  • Views: 32,177
  • PDF

Modeling Design Pattern with Class Diagram

  1. Create a new project Design Patterns.
  2. Create a class diagram Chain of Responsibility.
    new class diagram
  3. Select Class from diagram toolbar. Click on the diagram to create a class. Name it as Client.
    new client
  4. Move the mouse cursor over the Client class, and drag out Association > Class to create an associated class Handler.
    create handler
  5. Right-click on Handler, and select Model Element Properties > Abstract to set it as abstract.
    set handler abstract
  6. Right-click on Handler class, and select Add > Operation from the popup menu.
    new handler oper
  7. Name the operation HandleRequest().
  8. Right-click on HandleRequest, and select Model Element Properties > Abstract to set it as abstract.
    set handle request abstract
  9. Move the mouse cursor over the Handler class, and click on the resource icon Self Association to create a self association.
    create self asso
  10. Name the association end successor.
    name end
  11. Move the mouse cursor over the Handler class, and drag out Generalization > Class to create subclasses ConcreteHandler.
    create concrete handler
  12. In practice, there may be multiple concrete handlers. To represent this, stereotype the class ConcreteHandler as PTN Cloneable. Right-click on ConcreteHandler and select Stereotypes > Stereotype... from the popup menu.
    stereotype concrete handler
  13. In the Stereotypes tab of the Class Specification dialog box, select PTN Cloneable and click > to assign it to ConcreteHandler class. Click OK to confirm.
    select ptn cloneable
  14. We need make the concrete handlers inherit operations from the handle class. Right-click on ConcreteHandler and select Related Elements > Realize all Interfaces from the popup menu.
    realize interface
    Up to now, the diagram should look like this:
    pattern modeled

Defining Pattern

  1. Select all classes on the class diagram.
    select_all_classes
  2. Right-click on the selection and select Define Design Pattern... from the popup menu.
    define design pattern
  3. In the Define Design Pattern dialog box, specify the pattern name Chain of Responsibility. Keep the file name as is. Click OK to proceed.
    name pattern

Applying Design Pattern on Class Diagram

In this section, we are going to apply the chain of responsibility pattern in modeling a coin dispenser.

  1. Create a new project Coin Dispenser.
  2. Create a class diagram Domain Model.
  3. Right-click on the class diagram and select Utilities > Apply Design Pattern... from the popup menu.
    apply design pattern
  4. In the Design Pattern dialog box, select Chain of Responsibility from the list of patterns.
    select chain of responsibility
  5. Click on Handler in the overview.
    select handler
  6. Rename Handler to CoinDispenser, and operation HandleRequest to Dispense at the bottom pane.
    rename handler
  7. Click on ConcreteHandler in overview, and rename it to DollarDispenser, and operation HandleRequest to Dispense.
    rename dollar dispenser
  8. We need one more concrete handler for dispensing cents. Keep ConcreteHandler selected, click on + and select Clone... from the popup menu.
    clone
  9. Enter 1 to be the number of classes to clone. Click OK to confirm.
    clone count
  10. Rename ConcreteHandler2 to CentDispenser, and operation HandleRequest to Dispense.
    rename concrete handler
  11. Click OK to apply the pattern to diagram.
  12. Tidy up the diagram. Here is the result:
    result



Turn every software project into a successful one.

We use cookies to offer you a better experience. By visiting our website, you agree to the use of cookies as described in our Cookie Policy.

OK