Upload
tracey
View
29
Download
0
Embed Size (px)
DESCRIPTION
Computer Science 313 – Advanced Programming Topics. Lecture 23: Command Pattern. Strategy Pattern. Define interface for family of algorithms Encapsulate algorithm in class of its own Algorithm instance held in field of Context class Delegate responsibility for action to this object - PowerPoint PPT Presentation
Citation preview
LECTURE 23:COMMAND PATTERN
Computer Science 313 – Advanced Programming Topics
Strategy Pattern
Define interface for family of algorithms Encapsulate algorithm in class of its own Algorithm instance held in field of Context class
Delegate responsibility for action to this object
Set field to change algorithm dynamically
Limits To Strategy
Several limitations to strategy pattern Details of Strategy must be known by Context
Context must execute actual Strategy Strategy should not maintain state Cannot determine past Strategys
Limits To Strategy
Several limitations to strategy pattern Details of Strategy must be known by Context
Context must execute actual Strategy Strategy should not maintain state Cannot determine past Strategys
Why Is This A Problem?
Unable to log steps taken during program But a Strategy is not a tangible object
Cannot undo a Strategy once executed To enable “undo” would need log of
actions But Strategy lacks state to save actual
results Strategy independent of Context
Cannot use external objects when executed
Specific context cannot host a Strategy
Command Pattern
Encapsulates single action as an object Each instance can be used one or more
times Define range of actions in abstract Command Pattern defines one method to execute Command
Adjust the state of a Command using fields Modify how it executes and what it does Use to specify which instance Command
uses More than parameters to control
exposed method
Command Pattern
Encapsulates single action as an object Each instance can be used one or more
times Define range of actions in abstract Command Pattern defines one method to execute Command
Adjust the state of a Command using fields Modify how it executes and what it does Use to specify which instance Command
uses More than parameters to control
exposed method
Command Pattern Intent
Encapsulate single request within an instance Client code can then pass requests as
parameter Pattern treats Command as normal
object Queue Commands to execute in certain
order Once executed, record Commands in log
Command Pattern Usage
Commands can support undo & redo options Additional method in Command for undo
support Record prior state using Command’s fields
Once executed, Stack holds Commands Pop Command & execute undo() method
in turn
Command Pattern Intent
Split creation, execution, & performance Command can select actor who performs it Pattern creates one class executes Commands
Client class creating Command object to start
Command Pattern Decoupling
What we want to doWho does itWhen it is done
Command Pattern Decoupling
What we want to doWho does itWhen it is done
We wish we knew about the Command Pattern
Command Pattern Decoupling
What we want to doWho does itWhen it is done
We wish we knew about the Command Pattern
We wish we knew about the Command Pattern
Command Pattern Decoupling
What we want to doWho does itWhen it is done
We wish we knew about the Command Pattern
We wish we knew about the Command Pattern
We wish we knew about the Command Pattern
For Next Class
Lab #5 on Angel & can rework on Friday Hopefully, should reuse all your existing
code Retrofit to use pattern by factoring
existing code In the book, read pages 203 - 214
Start implementing the Command Pattern
What classes would we need? Who executes the command? And what the heck is a NOP (Null
Command)?