CS427a: Object-Oriented Programming - Yale...
Transcript of CS427a: Object-Oriented Programming - Yale...
![Page 1: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/1.jpg)
CS427a: Object-Oriented Programming Design Patterns for Flexible and Reusable design
Michael J. Fischer(from slides by Y. Richard Yang)
Lecture 23bNovember 29, 2011
![Page 2: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/2.jpg)
Example: Duck Game
• A startup produces a duck-pond simulation game
• The game shows a large variety of duck species swimming and making quacking sounds
![Page 3: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/3.jpg)
Initial Design
MillardDuck
display() { looks like a mallard}
RedheadDuck
display() { looks like a redhat}
Other types of ducks
Duck
quack()swim()display() = 0// Other duck-like method
![Page 4: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/4.jpg)
Design Change: add fly()Duck
quack()swim()display() = 0fly()// Other duck-like method
MillardDuck
display() { looks like a mallard}
RedheadDuck
display() { looks like a redhat}
Other types of ducks
![Page 5: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/5.jpg)
Problem• Generalization may lead to
unintended behaviors: a rubber duck is flying and quacks
Duck
quack()swim()display() = 0// Other duck-like method
RubberDuck
display() {looks like a rubber duck}quack() { // sqeak }fly() { // cannot fly }
MillardDuck
display() { looks like a mallard}
![Page 6: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/6.jpg)
Anticipating Changes
• Identify the aspects of your application that may vary– What may change?
• Anticipate that – new types of ducks may appear and – behaviors (quack, swimming, and flying) may
change, even change at run time (swirl flying, circular flying, …)
![Page 7: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/7.jpg)
Handling Varying Behaviors• Solution: take what varies and “encapsulate”
it– Since fly() and quack() vary across ducks, separate
these behaviors from the Duck class and create a new set of classes to represent each behavior
super class of all ducksVarying and run-time changeable behaviors
![Page 8: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/8.jpg)
Design
• Each duck object has a fly behavior
FlyWithWings
fly() { //}
FlyNoWay
fly() { // cannot fly}
<<interface>>FlyBehavior
fly()
![Page 9: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/9.jpg)
Programming to implementation vs. interface/supertype
• Programming to an implementation– Dog d = new Dog();– d.bark();
• Programming to an interface/supertype– Animal a = new Dog();– a.makeSound();
![Page 10: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/10.jpg)
Implementation
FlyWithWings
fly() { //}
FlyNoWay
fly() { // cannot fly}
<<interface>>FlyBehavior
fly()
MallardDuck
display() { looks like a mallard}
RedheadDuck
display() { looks like a redhat}
Duck
quack()swim()display() = 0// Other duck-like method
![Page 11: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/11.jpg)
Exercise
• Add rocket-powered flying?
![Page 12: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/12.jpg)
The Strategy Pattern
• Defines a set of algorithms, encapsulates each one, and makes them interchangeable by defining a common interface
![Page 13: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/13.jpg)
Exercise
![Page 14: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/14.jpg)
Summary: Design Principles
• Identify the aspects of your application that vary and separate them from what stay the same
• Program to an interface not implementation
• Favor composition over inheritance
![Page 15: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/15.jpg)
Example: KitchenViewer Interface
Wallcabinet
Counter
Floorcabinet
Modern Classic Antique Arts & Crafts
menu
display area
styles
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
![Page 16: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/16.jpg)
KitchenViewer Example
Modern Classic Antique Arts & Crafts
Wall cabinets Floor cabinetsCountertop
![Page 17: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/17.jpg)
Selecting Antique Style
Modern Classic Antique Arts & Crafts
![Page 18: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/18.jpg)
KitchenViewer Using Standard Inheritance
Kitchen
ClientrenderKitchen()
FloorCabinet
ModernWallCabinet
ModernFloorCabinet AntiqueFloorCabinet
AntiqueWallCabinet
WallCabinet
Aspect of the system thatmay change/vary?
: Reference direction
![Page 19: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/19.jpg)
AntiqueKStylegetWallCabinet()getFloorCabinet()
The Abstract Factory Idea
KitchenStylegetWallCabinet()getFloorCabinet()
ModernKStylegetWallCabinet()getFloorCabinet()
WallCabinet FloorCabinet
AntiqueWallCabinet AntiqueFloorCabinet
FloorCabinet getFloorCabinet() { return new AntiqueFloorCabinet(); }
……
FloorCabinet getFloorCabinet() { return new ModernFloorCabinet(); }
![Page 20: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/20.jpg)
Abstract Factory Design Pattern Applied to KitchenViewer
KitchenStylegetWallCabinet()getFloorCabinet()
KitchengetWallCabinet()getFloorcabinet()
ClientrenderKitchen( KitchenStyle )
ModernKStylegetWallCabinet()getFloorCabinet()
ModernKStylegetWallCabinet()getFloorCabinet()
AntiqueKStylegetWallCabinet()getFloorCabinet()
WallCabinet FloorCabinet
ModernWallCabinet
ModernFloorCabinet
AntiqueWallCabinet
AntiqueFloorCabinet
![Page 21: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/21.jpg)
Abstract Factory Design Pattern
StylegetComponentA()getComponentB()
ClientdoOperation( Style myStyle )
Style1getComponentA()getComponentB()
Style2getComponentA()getComponentB()
ComponentA ComponentB
Style1ComponentA
Style1ComponentB
Style2ComponentA
Style2ComponentB
Collection
![Page 22: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/22.jpg)
Concrete and Abstract Layers
KitchenStyle
Kitchen
Client
ModernKStyle
AntiqueKStyle
WallCabinet
FloorCabinet
ModernWallCabinet
ModernFloorCabinet
AntiqueWallCabinet
AntiqueFloorCabinet
Abstract level
Concrete level
![Page 23: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/23.jpg)
getWallCabinet()
Abstract Factory Application Sequence Diagram
myStyle:KitchenStyleClient
myStyle:ModernKStyle
myStyle:AntiqueKStyle
renderKitchen( myStyle )
wallCabinet1:ModernWallCabinet
wallCabinet1:AntiqueWallCabinet
ModernWallCabinet()getWallCabinet()
AntiqueWallCabinet()
myStyle.getWallCabinet()
-- IF myStyle BELONGS TO ModernKStyle --
-- IF myStyle BELONGS TO AntiqueKStyle --
![Page 24: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/24.jpg)
Potential use of this Design Pattern?
StylegetComponentA()getComponentB()
ClientdoOperation( Style myStyle )
Style1getComponentA()getComponentB()
Style2getComponentA()getComponentB()
ComponentA ComponentB
Style1ComponentA
Style1ComponentB
Style2ComponentA
Style2ComponentB
Collection
![Page 25: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/25.jpg)
References
• Design Patterns
• Headfirst Design Patterns
• Software Design
![Page 26: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/26.jpg)
Example: Starbuzz Coffee
• The coffee shop offers a variety of beverages
HouseBlend
cost()
Beverage
description
getDescription();cost();// Other methods
DarkRoast
cost()
Decaf
cost()
Espresso
cost()
![Page 27: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/27.jpg)
Problem
• A customer may also ask for condiments– steamed milk– soy– mocha (otherwise known as chocolate)– whipped milk
• Starbuzz charges a bit for each of these
![Page 28: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/28.jpg)
![Page 29: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/29.jpg)
HouseBlend
cost()
Beverage
descriptionmilksoymochawhip
getDescription();cost();
hasMilk(); setMilk();hasSoy(); setSoy();hasMocha(); setMocha();hasWhip(); setWhip();
// Other methods
DarkRoast
cost()
Decaf
cost()
Espresso
cost()
Aspect of the system thatmay change/vary?
Attempt 1
![Page 30: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/30.jpg)
Potential Changes
• Potential changes:– Price change to condiments– New condiments– Double moca– …
![Page 31: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/31.jpg)
Design idea
• Basic idea: extension at run time, not compile time
• Definition: The Decorator pattern attaches additional features to an object dynamically. It provides a flexible alternative to subclassing for extending functionality
![Page 32: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/32.jpg)
Design approach 1
• Each beverage contains a dynamic list of condiments
• Example– Take a DarkRoast object– Decorate it with a Mocha object– Decorate it with a Whip object
UML class model?
![Page 33: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/33.jpg)
Decorator design
• Example– Take a DarkRoast object– Decorate it with a Mocha object– Decorate it with a Whip object– Call the cost() method and rely on delegation to
add on the condiment cost
• Decorator adds its own behavior before or after calling the decorated object
![Page 34: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/34.jpg)
Decoration Delegation Process
![Page 35: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/35.jpg)
Decorator Class Model
Client
objDecorated
DecoratordoAction()
1
ConcreteComponentdoAction()
ComponentdoAction()
void doAction(){ ….. // do actions special to this decoration objDecorated.doAction(); // pass along}
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
ConcreteDecoratorAdoAction()
ConcreteDecoratorBdoAction()
![Page 36: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/36.jpg)
Sequence Diagram for Decorator
:Client
doAction()
decoration1:Decoration
doAction()
Decoration1.objDecorated:Decoration
:Component
doAction()
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
![Page 37: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/37.jpg)
Decoration Features
• Decorators have the same supertype as the objects they decorate
• You can use one or more decorators to wrap an object– Thus, you can pass decorated object in place of
original (wrapped) object• The decorator adds its own behavior either
before or after delegating to the object it decorates to
• Objects can be decorated at any time, including run-time, with as many decorators as possible
![Page 38: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/38.jpg)
Exercise
• Suppose we allow different sizes for the beverages– Tall (small)– Grande (medium)– Venti (large)
![Page 39: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/39.jpg)
Some Common Design Patterns
![Page 40: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/40.jpg)
Example: Weather-O-Rama
![Page 41: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/41.jpg)
Weather-O-Rama
![Page 42: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/42.jpg)
Weather-O-Rama InterfaceWeatherData
getTemperature();getHumidity();getPressure();measurementsChanged();setMeasurements(); // other methods
This method gets called wheneverthe weather measurements have been updated.
![Page 43: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/43.jpg)
First Implementationvoid measurementsChanged() {
float temp = getTemperature() ;
float humidity = getHumidity() ;
float pressure = getPressure() ;
currentConditionsDisplay->update(temp, humidity, pressure) ; statisticsDisplay->update(temp, humidity, pressure) ;
forecastDisplay->update(temp, humidity, pressure) ;
}
By coding to concrete implementation, we have no way of allowing other displays and plug in.
![Page 44: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/44.jpg)
Observer Pattern
• Design Purpose: defines a run-time, one-to-many dependency between objects so that when one object (the subject) changes state, all of the dependents (observers) are notified.
![Page 45: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/45.jpg)
Observer Design Pattern
SubjectregisterObserver();removeObserver();notifyObservers();
Observerupdate()
ConcreteSubjectgetState();setState();
ConcreteObserver
update()
for all Observer’s o: o.update();
Client1..n
Server part Client part
![Page 46: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/46.jpg)
How does Observer apply these design principles?
• Identify the aspects of your application that vary and separate them from what stay the same
• Program to an interface not implementation
• Favor composition over inheritance
![Page 47: CS427a: Object-Oriented Programming - Yale Universityzoo.cs.yale.edu/classes/cs427/2011a/lectures/ln23b.pdf · CS427a: Object-Oriented Programming Design Patterns for Flexible and](https://reader035.fdocuments.in/reader035/viewer/2022081614/5fcd26e7f2b8da58565ccf03/html5/thumbnails/47.jpg)
Discussion
• Java Observation design: update(Observable o, Object obj);
SubjectregisterObserver();removeObserver();notifyObservers();
Observerupdate()
ConcreteSubjectgetState();setState();
ConcreteObserver
update()
for all Observer’s o: o.update();
1..n
SubjectregisterObserver();removeObserver();notifyObservers();
Observerupdate()
ConcreteSubjectgetState();setState();
ConcreteObserver
update()
for all Observer’s o: o.update();
Client1..n