Design Patterns -Session II

36
OO Design Patterns Session 2 Observer, Strategy, Decorator 

Transcript of Design Patterns -Session II

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 1/36

OO Design Patterns

Session 2

Observer, Strategy, Decorator 

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 2/36

Observer Pattern

Or« How do I keep clients aware of 

changes, when I¶m not sure, or don¶t

care, who they are?

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 3/36

Observer Pattern ± High Level

Category : Behavioral

The Observer Pattern allows one or 

more objects (Observer) to monitor another object (Subject).

 A subset of the Pub-Sub Pattern

When the state of one object changes,dependants are notified

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 4/36

Observer Pattern

OO Principals

Promotes loose couplings

The Subject does not need to be aware of 

Observers except at runtime

Favors composition over inheritance

Program to an interface

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 5/36

Observer Pattern

Basic Structure

Observalable Subject

1 or more Observers

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 6/36

Observer Pattern ± Observer 

The Observer can register and

unregister itself with the Subject

While registered any events the Subjectnotifies on are received by all Observers

The Observer can be programmed to an

interface that specifies a way for the

Subject to update it.

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 7/36

Observer Pattern ± Observer 

The Observer is programmedto an interface that specifiesa way it to interact with theSubject

public interface Observer {

public void update(Subject o );

}

-OR-

public interface Observer {

public void update(Subject o, Data a );

}

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 8/36

Observer Pattern ± Subject

The Subject maintains a list

of Observers

The subject provides

access to Observers to

add or removethemselves from a

distribution list

When the Subject needs to

notify, it simply updates all

currently registeredObservers

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 9/36

Observer Pattern ± SUN Impl

Java has a number of Observer Pattern

implementation

Swing General Purpose Observer 

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 10/36

Observer Pattern ± SUN Impl

General Purpose Observer 

Java comes with an out of the box

implementation of the Observer Pattern

The subject extends the  java.util.Obser vable

class

Observers implement the java.util.Obser ver 

interface

void update(Observable o, Object arg)

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 11/36

Observer Pattern ± SUN Impl

Some Things to Consider 

 As mentioned this implementation forces us

to extend Observable for the subject

Remember favor composition over inheritance

This is implicitly single-threaded

Synchronous

 As opposed to Asynch Pub/Sub

Push/Pull

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 12/36

Observer Pattern

Example

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 13/36

Observer Pattern

Q&A

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 14/36

Decorator Pattern

Or« How do I dynamically add

additional behaviors to an existing class?

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 15/36

Decorator Pattern ± High Level

Category : Structural

The Decorator Pattern allows

responsibility and functionality to beadded dynamically at run-time

Provides a flexible alternative to sub-

classing to extend functionality

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 16/36

Decorator Pattern

OO Principals

Encapsulate what varies

Favor composition over inheritance Program to interfaces

Strive for loosely coupled designs between

objects

Open/closed pr inciple

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 17/36

Decorator Pattern

Open/closed pr inciple

Objects should be open for extension, but

closed for modification

 Allows an objects behavior to be modified

without altering its source

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 18/36

Decorator Pattern

Basic Structure

 Abstract Component Class

Concrete Components Abstract Decorator 

Concrete Decorator 

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 19/36

Decorator Pattern

Basic Structure

 Abstract Component Class

 A common ancestor that all involved objects

extend

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 20/36

Decorator Pattern

Basic Structure

Concrete Components

The object to add dynamic behaviors to

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 21/36

Decorator Pattern

Basic Structure

 Abstract Decorator  Enforces the contract of the Abstract Component

Class

 Allows for more decorator specific behaviors to be

defined

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 22/36

Decorator Pattern

Basic Structure

Concrete Decorator 

Implements the specific behavior 

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 23/36

Decorator Pattern

Real World Examples

 java.io

 Abstract Component Class

InputStream

Concrete Components

FileInputStream, StringBufferInputStream«

 Abstract Decorator 

FilterInputStream

Concrete Decorator 

BufferedInputStream, DataInputStream«

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 24/36

Decorator Pattern

Example problem and Solution

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 25/36

Decorator Pattern

Cons

Can Cause ³Class Explosion´

Each Decorator is a class

Code can be hard to find/debug

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 26/36

Strategy Pattern

Or«How do I apply algorithms to data

dynamically?

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 27/36

Strategy Pattern ± High Level

Category : Behavioral

 Allows algorithms vary independently

from clients that use them

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 28/36

Strategy Pattern

OO Principals

Encapsulate what varies

Favor composition over inheritance Program to interfaces

Strive for loosely coupled designs between

objects

Open/closed principle

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 29/36

Strategy Pattern

Basic structure

Context

Strategy Interface Concrete Strategies

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 30/36

Strategy Pattern

Context

Is Configured with aConcrete Strategy

Initiates the work of the Strategy via theStrategy Interface

May provide andinterface for theStrategy to accessit Data

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 31/36

Strategy Pattern

Strategy Interface

Defines a way for 

the Context to

interact with eachalgorithm

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 32/36

Strategy Pattern

Concrete Strategy

Encapsulates the

algorithm

Performs the actualwork

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 33/36

Strategy Pattern

Real World Examples

Custom Sort options for lists

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 34/36

Strategy Pattern

Example problem and Solution

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 35/36

Strategy Pattern

Q&A

8/8/2019 Design Patterns -Session II

http://slidepdf.com/reader/full/design-patterns-session-ii 36/36

Strategy Pattern

DONE