Lecture 3
Lecture 3
Introduction
1
Sequence
■ Motivation
■ Classification of Design Patterns
■ Benefits of Design Pattern
■ Design pattern Case Study – SimUDuck
■ Strategy Pattern
2
Motivation
3
Motivation
4
Two Main Catalogues
5
Motivation
6
Design Patterns Classification
GoF Design Patterns
class
scope
object
scope
7
Design Patterns Classification
8
Design Patterns Classification
9
Design Patterns Classification
10
11
What colleagues say to Rick…
12
The Power of Shared Pattern
Vocabulary
■ Shared pattern vocab are powerful
■ Pattern allows you to say more with less
■ Talking at pattern level allows you to stay “in the
design” longer
■ Shared vocab can turbo charge your development
team
■ Shared vocab encourage more junior developers to get
up to speed
13
14
Tools for Design Tool Box
15
Case Study: Design of SimUDuck App
16
Objectives of the Case Study
■ Go through a simple application design
■ See the problems of inflexible design as the new
requirements emerge
■ See how improvements are made based on some
fundamental design principles
17
Background…
18
Background…
19
It’s time for big innovation!
20
Requirement: We need Ducks to fly…
21
Joe’s New Design
22
But something went horribly wrong..
Rubber Ducks were also flying in demo…
23
24
Overridden Methods
25
Overridden Methods
■ Now, let's say you could actually create Animals.
◻ If you could, then calling makeSound() would call the method
defined in the superclass.
◻ If you create a specific Dog, calling makeSound() will display
"woof".
■ Now let's say you created a specific Cat.
◻ In that example, Cat does not have a makeSound() method, so
when you call makeSound() on Cat, it calls the method in the
superclass Animal and does nothing.
■ Remember, Cat and Dog are subclasses of Animal because they
extend Animal.
26
Dynamic Method Binding
■ Dynamic method binding is how Java decides what method to call
when it has to decide between the superclass and the subclass.
■ So, how exactly does it decide?
■ We just made a Dog but declared it as an Animal!
27
Dynamic Method Binding
■ Why in the world wouldn't we just do Dog dog = new Dog() ?
■ The answer is that by using abstraction, you can actually group
many different types of objects together.
■ Let's see how we can use this concept for storing objects:
28
29
New Requirement: Executives want the
product update 6 monthly…
30
How about Interface?
31
What do you think about this design?
33
Separating what changes from what
stays the same…
34
■ We want to assign behavior to instance of the Duck.
■ Even better, if can change the behavior dynamically
35
36
Animal animal = getAnimal();
37
Implementing Duck Behavior
38
Design for Behavior Reuse
39
Integrating Duck Behavior
40
41
42
43
44
45
46
47
Setting Behavior Dynamically
48
Setting Behavior Dynamically
49
Setting Behavior Dynamically
50
51
The Big Picture on Encapsulated Behavior
53
54
Assignment # 1
■ Develop and Execute this example in two languages
◻ Java
◻ C# or C++
55
END Lec 3
56