Download presentation
Presentation is loading. Please wait.
Published byMartha Bond Modified over 9 years ago
1
Chapter 1: Introduction to Design Patterns
2
SimUDuck Example
3
System Update Revise the current system to cater for ducks that fly. How can this be done?
4
A Possible Solution Suppose that a RubberDuck class needs to be added?
5
Revision: Use Inheritance? Suppose that you have to add a decoy duck that does not fly or quack…
6
Another Solution: Interfaces The aspects that change for each type of duck are the methods fly() and quack(). Take these methods out of the Duck class. Create interfaces for these methods: – Flyable – has a method fly() – Quackable – has a method quack()
7
Using Interfaces Problems with this?
8
Disadvantages of the Approach All methods in Java interfaces are abstract. Code has to be duplicated for classes. Modification will have to be made to more than one class. This will introduce bugs.
9
Design Principle Identify the aspects of the application that vary and separate them from what stays the same. Encapsulate the parts that vary. Future changes can be made without affecting parts that do not vary. Results in fewer unexpected consequences from code change.
10
Solution Design principle: Program to interface and not to implementation. An interface FlyBehavior will be implemented by subclasses for different types of flight. An interface Quackable will be implemented for different types of “quack”.
11
Example Abstract class OR Interface
12
FlyBehavior Interface
13
QuackBehavior
14
New Design
15
On Last Problem Still programming to implementation in the subclasses. Solution – include set methods in the Duck class – To set quack behavior – To set fly behavior The set methods allow for behavior to be dynamic at runtime
16
Exercise Add a new type of duck to the simulator, namely, model duck. A model duck does not fly and quacks. Add a new fly behavior to the simulator, namely, FlyRocketPower, which represents flight via a rocket. Create an instance of a model duck and change its behaviour at runtime to be flight via a rocket.
17
Has-A Can be Better than Is-A Inheritance promotes reuse but not extensibility. Composition facilitates more flexibility. Composition allows for behavior to change at runtime (rather than editing code). Design principle: Favor composition over inheritance.
18
The Strategy Pattern Defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
19
Lessons Learned from the Strategy Pattern Encapsulate what varies. Favor composition over inheritance. Program to interfaces, not implementations
20
Advantages of Sharing a Pattern Vocabulary Shared pattern vocabularies are powerful. Patterns allow you to say more with less. Talking at the pattern level allows to stay “in design” longer. Shared vocabularies can turbo charge your development. Shared vocabularies encourage more junior developers to get up to speed.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.