+ All Categories
Home > Documents > Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain...

Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain...

Date post: 31-Dec-2015
Category:
Upload: maurice-mccoy
View: 218 times
Download: 0 times
Share this document with a friend
80
Chapter 9 Behavioral Design Patterns Interpreter Iterator Mediator Observer State Chain of Responsibility Command Template
Transcript
Page 1: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Chapter 9Behavioral Design Patterns

Interpreter Iterator Mediator Observer State Chain of Responsibility Command Template

Page 2: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Interpreter Design Pattern

1 of 8

Page 3: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Interpret expressions written in a formal grammar.

Design Pattern Summary

Represent the grammar using a

recursive design pattern form: Pass

interpretation to aggregated objects.

Interpreter

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 4: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Interpreter Design Pattern

AbstractExpressioninterpret()

Client

TerminalExpressioninterpret()

NonTerminalExpressioninterpret()

1..n

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 5: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

interpret()

Interpreter Sequence Diagram

TerminalExpression

:NonterminalExpression:Client AbstractExpression

NonterminalExpression

...

create & interpret()

create & interpret()

...

...

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 6: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Example Interpreter Application: Network Assembly

260Mhz & 64MB

400Mhz & 128MB

260Mhz & 32MB

assemble ….

Graphics reproduced with permission from Corel.Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 7: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Input For Network Assembly Example

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 8: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Interpreter Design Pattern

Componentassemble()

NetSystemassemble()

component1

Client

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 9: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Application of Interpreter Design Pattern

Componentassemble()

Computerassemble()

NetSystemassemble()

component1

component2

RAMdescribe()

CPUdescribe()

cpu

ram

Client

SetupgetInputFromUser()

parse()

1

0..1

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

<<interface>>

component ::= net_system | computernet_system ::= { component } { component } | { component }computer ::= {cpu ram }cpu ::= integerram ::= integer

Page 10: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Source code example

interface Component{

}

class Computer implements Component{

}

class NetSystem implements Component{

}

class CPU{

}

class RAM{

}

class Setup{ main()

}

class Client{. . .Component networkOrder;. . .networkOrder.assemble();. . .}

Page 11: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Interpreter Design Pattern

-- a form for parsing and a means of processing expressions.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 12: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Iterator Design Pattern

2 of 8

Page 13: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose (Gamma et al)

Provide a way to access the elements of an

aggregate object sequentially without

exposing its underlying representation.

Design Pattern Summary

Encapsulate the iteration in a class pointing

(in effect) to an element of the aggregate.

Iterator

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 14: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

- given a collection of objects

e.g.,

o the videos in a video store

o a directory

- having specified ways to progress through them

e.g.,

o “list in alphabetical order”

o “list all videos currently on loan”

... encapsulate each of these ways

Aggregate object

Purpose of Iterator

iterator2

iterator7

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 15: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Iterator Class Model

Aggregate

Client

IteratorsetToFirst()increment()

isDone()getCurrentItem()

ConcreteIterator ConcreteAggregateAggregatedElement 1…n1

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 16: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Using Iterator Functions

/*

To perform desiredOperation() on elements of

the aggregate according to the iteration (order) i:

*/

for( i.setToFirst(); !i.isDone(); i.increment() )

desiredOperation( i.getCurrentElement() );

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 17: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Functions for Iterator

// Iterator "points" to first element:

void setToFirst();

// true if iterator "points" past the last element:

boolean isDone();

// Causes the iterator to point to its next element:

void increment();

// Return the element pointed to by the iterator:

C getCurrentElement(); Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 18: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Iterator Operations

Set to beginning Increment Get current

elementCheck not done yet

The Iterator

Index (integer) i on

array myArrayi = 0 ++i myArray[ i ]

i < myArray.length

Index (integer) j on

VectormyVector

j = 0 ++jmyVector

.get( j )j < myVector

.size()

Iterator (object)myIterator

myIterator.setToFirst()

myIterator.increment()

myIterator.getCurrent Element()

! myIterator.isDone()

Iterator in Arrays, Vector, and in General

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 19: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Imagining Iterator

iterator:Iterator

element:Element

Aggregate of Elementobjects

Key: Intended sequence of Element objects

After first() executes, iterator references this object.

After increment() executes, iterator references this object.

Before increment() executes, iterator references this object.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 20: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Iterator Example Setup Code

// Suppose that we have iterators for forward and

// backward order: we can re-use print_employees()

List employees = new List();

ForwardListIterator forward // to go from front to back

= new ForwardListIterator ( employees );

ReverseListIterator backward // to go from back to front

= new ReverseListIterator ( employees );

client.print_employees( forward ); // print from front to back

client.print_employees( backward ); // print from back to front

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 21: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

An Organizational Chart Example

Vanna Presleyvice president, 4 years

Sue Millersvce. mgr., 7 years

Sam Markhamsvce. mgr., 5 years

Sal Monahansvce. mgr., 1 year

Iolanthe Carpind. contrib., 8

Inge Carlsonind. contrib., 12

Inez Clappind. contrib., 11

Inky Conwayind. contrib., 6

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 22: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Iterating by Years of Service Over an Organization Chart

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 23: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Flexibility ,

Correctness

Separate the “visiting” procedure from the processing of individual employees.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 24: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Class Structure for Iterator Example

ServiceIterator

OrgSeniorityIterator

OrgChartDP OrgChartIteratorDP

Teller

Employeedisplay()

Supervisor

Client Setup

OrgChartIteratorfirst()next()isDone()currentItem()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 25: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Iterator in the Java API

CollectionIterator iterator()

Iteratornext()hasNext()remove()

ListIterator List AbstractCollection

AbstractListListIterator listIterator()

Iter *

ListItr *

* IBM implementationArrayList Vector

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

<<interface>>

Page 26: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Address Book Application using Java Iterator

CollectionIterator iterator()

Iteratornext()hasNext()remove()

ListIterator List

AbstractListListIterator listIterator()

ListItr *

* IBM implementation

ArrayList

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

<<interface>>

AddressBookNameAddressEntry 0..n

Page 27: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Iterator Design Pattern

-- to access the elements of a collection.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 28: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Mediator Design Pattern

3 of 8

Page 29: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Avoid references between dependent objects

Design Pattern Summary

Capture mutual behavior in a separate class

Mediator

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 30: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

The Mediator Class Model

Mediator Colleague

ConcreteMediator

ConcreteColleague1 ConcreteColleague2

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

<<abstract>> <<abstract>>

Page 31: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Reusability and

Robustness

Avoid hard-coded dependencies among the game’s GUI classes, enabling their use in other contexts.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 32: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Solicitation of Customer Information (1 of 2)

Name and Location

Basic information

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 33: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Solicitation of Customer Information (2 of 2)

Account Information

Additional information

Customer ID

Total business

Amount due

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 34: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Application of Mediator To Customer Information Application

CustomerDisplay

BasicInfoGUI

CustomerGUI

CustTypeDisplay CustInfoDisplay

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Concretemediator

Page 35: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

The Mediator Class Model in the Java API

ComponentListeneractionPerformed()

ComponentaddComponentListener()

MyEventListener

MyComponent1 MyComponent2

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 36: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Mediator Design Pattern

-- to capture mutual behavior without direct dependency.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 37: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Observer Design Pattern

4 of 8

Page 38: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Arrange for a set of objects to

be affected by a single object

Design Pattern Summary

The single object aggregates the set, calling a

method with a fixed name on each member

Observer

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 39: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Observer Design Pattern

Sourcenotify()

Observerupdate()

for all Observer’s o:o.update();

Client1

2

1..n

Server part Client part

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Observable

Page 40: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Observer Design Pattern

Sourcenotify()

Observerupdate()

ConcreteSourcestate

ConcreteObserverobserverState

update()

for all Observer’s o: o.update();

Client

2

3

1..n

Server part Client part

1

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 41: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Observer Applied to International Hamburger Co.

Sourcenotify()

Observerupdate()

Headquartersdemand

SeniorManagementforecastupdate()

Client1..n

MarketingmarketingDemand

update()doDisplay()if( abs( hq.demand - marketingDemand ) > 0.01 )

{ marketingDemand = hq.getDemand();doDisplay();

}

Server part Client part

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 42: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Flexibility

Allow mutual funds objects to easily acquire or divest of stocks.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 43: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

ObservablenotifyObservers()

Observerupdate( Observable, Object )

AwesomeIncprice

LongTermMutualFund….

update(…)

Observer Example:

Mutual Funds

Key:Developer Class

Java API Class

MediumTermMutualFund….

update(…)HiGrowthMutualFund

….update(…)

MutualFundvalue

numAwesomeShares

Client

Setup

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Source

Page 44: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

ObservablenotifyObservers()

Observerupdate( Observable, Object )

MyObservableMyConcreteObserver

observerStateupdate(…)

Observer in the Java API

Key: Developer ClassJava API Class

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Model-View-Controller pattern : (Observable, Observer, (Client & Setup) )

data GUIs

Page 45: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Observer Design Pattern

-- to keep a set of objects up to date with the state of a designated object.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 46: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

State Design Pattern

5 of 8

Page 47: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Cause an object to behave in a

manner determined by its state

Design Pattern Summary

Aggregate a state object

and delegate behavior to it

State

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 48: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

TargetStateBhandleRequest()

TargetdoRequest()

State Design Pattern Structure: doRequest() behaves according to state of Target

targetState TargetStatehandleRequest()

Client

TargetStateAhandleRequest()

1

{ targetState.handleRequest(); }

. . . . . .

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 49: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

GUI For a Role-Playing Video Game

Set Characteristics

Courtesy Tom VanCourt and CorelAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 50: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Correctness and

Reusability

Separate the generic code for handling button clicks from the actions which depend on the game’s status at the time.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 51: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

State Design Pattern Applied to Role-Playing Game

MyGamesetCharacteristics()

MyGameStatehandleClick()

state

{ state.handleClick(); }

EngaginghandleClick()

SettingUphandleClick()

WaitinghandleClick()

SettingCharacteristicshandleClick()

{ showWindow(); …. // more }

{ showWindow(); …. // more }

{ // already responding … // display message }

{ // do nothing … // display message}

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 52: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: State Design Pattern

-- to cause a object’s functions to behave according to the state it’s in.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 53: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Chain of Responsibility Design Pattern

6 of 8

Page 54: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Allow a set of objects to service a request.

It presents clients with a simple interface

Design Pattern Summary

Link the objects in a chain via aggregation,

allowing each to perform some of the

responsibility, passing the request along

Chain of Responsibility

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 55: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Chain of Responsibility: Object Model

entryHandler:HandlerSubclassX

(next element): HandlerSubclassY

(next element): HandlerSubclassZ

successor successor

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 56: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

HandlerSubclassAhandleRequest()respondA()

Chain of Responsibility Class Model

Client

HandlerSubclassBhandleRequest() respondB()

successor

Handler

handleRequest()

respondA(); // handle some of the required functionality successor.handleRequest(); // pass along remaining responsibility

. . . .

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 57: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

GUI For Customer Information Application

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 58: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

XML Output for Customer Information Application

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 59: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Flexibility

Isolate the responsibilities of each part of the input form to generate its XML.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 60: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Class Model For User Information Collection

CustomerInfoElement

CustomerName CompanyNameCustomerInfo

CustomerPersonal CustomerProfessionalCustomerAddress Company

container

TextFieldListener«client»

CustomerInfoApp«setup»

Each of these classes supports handleClick()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 61: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Object Model Fragment for Customer Information Example

: CompanyName

:Company

:CustomerProfessional

container

:CustomerInfo

handleClick()

container

handleClick()

container

handleClick()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 62: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Chain of Responsibility Design Pattern

-- to distribute functional responsibility among a collection of objects.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 63: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Command Design Pattern

7 of 8

Page 64: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Increase flexibility in calling for a service

e.g., allow undo-able operations

Design Pattern Summary

Capture operations as classes

Command

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 65: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Target1action1()

The Command Design Pattern

Action2Commandexecute()

Target2action2()

old approachCommand

execute()

Action1Commandexecute()

Client

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

<<abstract>>

new approach

Page 66: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Source Code Example

Command myCommand = Command.getCommand(. . .);

myCommand.execute();

Page 67: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

The Command Design Pattern: Example

MenuItemhandleClick()

Commandexecute()

CutCommandexecute()

Documentcut()

copy()

document

command

CopyCommandexecute()

document

document.cut()

document.copy()

command.execute()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

client

Page 68: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Flexibility and

Robustness

Isolate the responsibilities of the Word Processor commands, making them save-able and reversible.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 69: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Undo Example Class Model

WordProcessorCommand

execute()undo()

CutCommandtextCut: String

offset: int execute()

undo()

Documenttext: String

commandHistory

PasteCommand offset: intlength: intexecute()

undo()

0..n

QuitCommandexecute()

UndoCommandexecute()

document

DocumentCommandgetInputFromUser()document

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 70: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Command Design Pattern

-- to avoid calling a method directly (e.g., so as to record or intercept it).

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 71: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Template Design Pattern

8 of 8

Page 72: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Purpose

Allow runtime variants on an algorithm

Design Pattern Summary

Express the basic algorithm in a base class,

using method calls where variation is required

Template

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 73: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

• Required to solve equations of the form

ax2 + bx + c = 0.

• Must be able to handle all input possibilities for a, b, and c.

• This is a tutorial application that must provide full explanations to users about the solutions for all values for a, b, and c.

Example of Template Motivation

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 74: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

1. Report progress2. Display number of solutions3. Display first solution, if any 4. Display second solution, if any

A Basic Quadratic Algorithm

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 75: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Class Model for Template

TemplateAlgorithmhandleRequest()

nonInheritedMethod()calledMethod1()calledMethod2()

….

Algorithm1calledMethod1()calledMethod2()

….

algorithm

Algorithm3calledMethod1()calledMethod2()

….

Client

Algorithm2calledMethod1()calledMethod2()

….

{ algorithm.handleRequest(); }

SubjectdoRequest()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 76: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Design Goal At Work: Flexibility and

Robustness

Isolate the main algorithm for quadratic solution display. Isolate the variants that depend on the coefficients.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 77: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

NoSolutionsdisplayNumSolutions()displayFirstSolution()

displaySecondSolution()

OneSolutiondisplayNumSolutions()displayFirstSolution()

displaySecondSolution()

Class Model for Quadratic Problem

QuadraticEquationfloat a, b, c

solveQuadratic()

QuadraticAlgorithmdisplayWhatsHappening()

displaySolution()inputMakesSense()

displayNumSolutions();displayFirstSolution()

displaySecondSolution()

myQuadraticAlgorithm

TwoSolutionsdisplayNumSolutions()displayFirstSolution()

displaySecondSolution()

Client

{ myQuadraticAlgorithm.displaySolution(); }

SetupgetABC()

InfinitelyManySolutionsdisplayNumSolutions()displayFirstSolution()

displaySecondSolution()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

<<abstract>>

Page 78: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Source Code Example

QuadraticEquation myQuadraticEquation;

myQuadraticEquation.solve();

abstract class QuadraticAlgorithm{

}

class OneSolution extends QuadraticAlgorithm{

}

class QuadraticEquation{ QuadraticAlgorithm myQuadraticAlgorithm;}

Page 79: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Key Concept: Template Design Pattern

-- to capture a basic algorithm and its variants.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Page 80: Chapter 9 Behavioral Design Patterns o Interpreter o Iterator o Mediator o Observer o State o Chain of Responsibility o Command o Template.

Behavioral Design Patterns capture behavior among objects

Interpreter handles expressions in grammars

Iterator visits members of a collection in a sequential fashion

Mediator captures behavior among peer objects without building a

dependency between the objects

Observer updates objects affected by a single object

State allows method behavior to depend on current status

Chain of Responsibility allows a set of objects to provide

functionality collectively

Command captures function flexibly (e.g. undo-able)

Template captures basic algorithms, allowing variability

Summary of Behavioral Design Patterns

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Recommended