Top Banner
PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns
75

PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Dec 22, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

PRESENTED BY SANGEETA MEHTA

EECS810UNIVERSITY OF KANSAS

OCTOBER 2008

Design Patterns

Page 2: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

2

Contents

04/19/23University of Kansas

2

Introduction to OO conceptsIntroduction to Design Patterns

What are Design Patterns? Why use Design Patterns? Elements of a Design Pattern Design Patterns Classification Pros/Cons of Design Patterns

Popular Design PatternsConclusionReferences

Page 3: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

3

What are Design Patterns?

What Are Design Patterns? Wikipedia definition

“a design pattern is a general repeatable solution to a commonly occurring problem in software design”

Quote from Christopher Alexander “Each pattern describes a problem which occurs over

and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice” (GoF,1995)

04/19/23

3

University of Kansas

Page 4: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

4

Why use Design Patterns?

Good Design MaintainabilityExtensibilityScalabilityTestabilityReusablilty

Design PrinciplesProgram to an interface, not an implementation

High cohesionLow couplingOpen-Closed

Separation of concerns

Design PatternsSingleton

Abstract FactoryDAO

StrategyDecorator

04/19/23University of Kansas

Page 5: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

5

Why use Design Patterns?

Design Objectives Good Design (the “ilities”)

High readability and maintainability High extensibility High scalability High testability High reusability

04/19/23University of Kansas

Page 6: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

6

Why use Design Patterns?

04/19/23University of Kansas

Page 7: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

7

Elements of a Design Pattern

A pattern has four essential elements (GoF) Name

Describes the pattern Adds to common terminology for facilitating

communication (i.e. not just sentence enhancers) Problem

Describes when to apply the pattern Answers - What is the pattern trying to solve?

04/19/23University of Kansas

Page 8: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

8

Elements of a Design Pattern (cont.)

Solution Describes elements, relationships, responsibilities, and

collaborations which make up the design Consequences

Results of applying the pattern Benefits and Costs Subjective depending on concrete scenarios

04/19/23University of Kansas

Page 9: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

9

Design Patterns Classification

A Pattern can be classified asCreationalStructural Behavioral

04/19/23University of Kansas

Page 10: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

10

Pros/Cons of Design Patterns

Pros Add consistency to designs by solving similar problems the

same way, independent of language Add clarity to design and design communication by

enabling a common vocabulary Improve time to solution by providing templates which

serve as foundations for good design Improve reuse through composition

04/19/23University of Kansas

Page 11: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

11

Pros/Cons of Design Patterns

Cons Some patterns come with negative consequences (i.e. object

proliferation, performance hits, additional layers) Consequences are subjective depending on concrete

scenarios Patterns are subject to different interpretations,

misinterpretations, and philosophies Patterns can be overused and abused Anti-Patterns

04/19/23University of Kansas

Page 12: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

12

Popular Design Patterns

Let’s take a look Strategy Observer Singleton Decorator Proxy Façade Adapter

04/19/23University of Kansas

Page 13: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

13

Strategy Definition

Defines a family of algorithms, encapsulates each one, and makes

them interchangeable. Strategy lets the algorithm vary independently from

clients that use it.

04/19/23University of Kansas

Page 14: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Design Principles

Identify the aspects of your application that vary and separate them from what stays the same

Program to an interface, not an implementation Favor composition over inheritance

04/19/23University of Kansas

14

Page 15: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

15

Strategy – Class diagram

Context

- strategy: Strategy

+ Context(Strategy)+ contextInterface() : void

ConcreteStrategyA

+ algorithmInterface() : void

ConcreteStrategyB

+ algorithmInterface() : void

ConcreteStrategyC

+ algorithmInterface() : void

«interface»Strategy

+ algorithmInterface() : void

-strategy

04/19/23University of Kansas

Page 16: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

16

Strategy - Problem

04/19/23University of Kansas

class Class Model

Cla ss1

Duck

+ display() : void+ quack() : void

MallardDuck

+ display() : void

RedHeadDuck

+ display() : void

RubberDuck

+ display() : void

Page 17: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Strategy - Solution

class Class Model

Cla ss1

Duck

- quackBehavior: QuackBehavior

+ display() : void+ performQuack() : void

{ quackBehavior.quack();}

+ setQuackBehavior(QuackBehavior) : void{ //Set the quackBehavior}

MallardDuck

+ display() : void

RedHeadDuck

+ display() : void

RubberDuck

+ display() : void

«interface»QuackBehavior

+ quack() : void

Quack

+ quack() : void{//Implements duck quacking}

Squeak

+ quack() : void{//implements duckie squeak}

MuteQuack

+ quack() : void{//do nothing - can't quack!}

StrategyExample

+ main() : void{//Instantiate a new MallardDuck//Set its quack behavior to a new instance of Quack//Invoke its performQuack() method}

setQuack

performQuack

Page 18: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

18

Strategy

Pros Provides encapsulation Hides implementation Allows behavior change at runtime

Cons Results in complex, hard to understand code if overused

04/19/23University of Kansas

Page 19: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

19

Observer Definition

Defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated

automatically.

04/19/23University of Kansas

Page 20: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Design Principles

Identify the aspects of your application that vary and separate them from what stays the same

Program to an interface, not an implementation Favor composition over inheritance Strive for loosely coupled designs between objects that

interact

04/19/23University of Kansas

20

Page 21: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

21

Observer – Class diagram

04/19/23University of Kansas

class Observ er

«interface»Subject

+ notifyObservers() : void+ registerObservers() : void+ removeObservers() : void

«interface»Observer

+ update() : void

ConcreteSubject

+ notifyObservers() : void+ registerObservers() : void+ removeObservers() : void

ConcreteObserver

+ update() : void

observers

subject

Page 22: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

22

Observer - Problem

04/19/23University of Kansas

class Observ er

WeatherData

- currentConditionsDisplay: CurrentConditionsDisplay- humidity: float- pressure: float- statisticsDisplay: StatisticsDisplay- temp: float

+ getHumidity() : float+ getPressure() : float+ getTemperature() : float+ measurementsChanges() : void

(//Get the changed float values//Instantiate CurrentConditionsDisplay//Call its update method with the float values//Instantiate StatisticsDisplay//Call its update method with the float values}

update

update

CurrentConditionsDiplay

+ update(float, float, float) : void

StatisticsDisplay

+ update(float, float, float) : void

Page 23: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Observer - Solution

class Observ er

StatisticsDisplay

+ StatisticsDisplay(Subject) : void{//Store reference to WeatherData//Call WeatherData's registerObserver method to register self}

+ update(float, float, float) : void{//get the new float values and display accordingly}

CurrentConditionsDisplay

+ CurrentConditionsDisplay(Subject) : void{//Store reference to WeatherData//Call WeatherData's registerObserver method to register self}

+ update(float, float, float) : void{//get the new float values and display accordingly}

WeatherData

- observers: ArrayList

+ measurementsChanged() : void{notifyObservers();}

+ notifyObservers() : void{//sends the update message to each observerin the observers list}

+ registerObserver(Observer) : void{//Adds the observer to the observers list}

+ removeObserver(Observer) : void{//First locates the observer in the observers list//If found, removes it from the list}

+ setMeasurements(float, float, float) : void{//Sets all the 3 measurements}

«interface»Observer

+ update(float, float, float) : void

«interface»Subject

+ notifyObservers() : void+ registerObserver(Observer) : void+ removeObserver(Observer) : void

subject

observers

Page 24: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

24

Observer

Pros Abstracts coupling between Subject and Observer Supports broadcast communication Supports unexpected updates Enables reusability of subjects and observers independently

of each other

Cons Exposes the Observer to the Subject (with push) Exposes the Subject to the Observer (with pull)

04/19/23University of Kansas

Page 25: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

25

Singleton Definition

Ensure a class only has one instance and provide a global point of access to it.

04/19/23University of Kansas

Page 26: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

26

Singleton – Class diagram

cmp Proxy

Singleton

- instance: Singleton

+ getInstance() : Singleton- Singleton() : void

if (instance == null){ instance = new Singleton();}

04/19/23University of Kansas

Page 27: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Singleton - Problem

class Singleton

BusinessObject

+ isBusinessday(Date) : boolean{//Create a new instance of BusinessDateChecker//Call BusinessDateChecker's isValidBusinessDate method//Return the result}

BusinessDateChecker

- CHRISTMAS: String = "12/25/08"- INDEPENDENCE: String = "7/04/08"- NEW_YEARS: String = "1/01/08"

+ isValidBusinessDate(Date) : boolean{//Has knowledge about the various holidays//Checks to see if the passed date is a holiday or a weekend.//Returns the appropriate result}

uses

Page 28: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Singleton - Solution

class Singleton

BusinessObject

+ isBusinessday(Date) : boolean{//Create a new instance of BusinessDateChecker//Call BusinessDateChecker's isValidBusinessDate method//Return the result}

BusinessDateChecker

- CHRISTMAS: String = "12/25/08"- INDEPENDENCE: String = "7/04/08"- NEW_YEARS: String = "1/01/08"

- BusinessDateChecker() : void{//Do nothing}

+ getInstance() : BusinessDateChecker{ if (instance == null) { instance = new BusinessDateChecker(); } return instance;}

+ isValidBusinessDate(Date) : boolean{//Has knowledge about the various holidays//Checks to see if the passed date is a holiday or a weekend.//Returns the appropriate result}

uses

Page 29: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

29

Singleton

cmp Proxy

public class Singleton { private static Singleton instance = null; protected Singleton() { //Exists only to defeat instantiation. }

public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance;}

public class SingletonInstantiator { public SingletonInstantiator() { Singleton instance = Singleton.getInstance(); Singleton anotherInstance = new Singleton(); ...... }

04/19/23University of Kansas

Page 30: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

30

Singleton

Pros Increases performance Prevents memory wastage Increases global data sharing

Cons Results in multithreading issues

04/19/23University of Kansas

Page 31: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

31

Patterns & Definitions – Group 1

Strategy Observer Singleton

Allows objects to be notified when state changes

Ensures one and only one instance of an object is created

Encapsulates inter-changeable behavior and uses delegation to decide which to use

04/19/23University of Kansas

31

04/19/23University of Kansas

Page 32: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

32

Patterns & Definitions – Group 1

Strategy Observer Singleton

Allows objects to be notified when state changes

Ensures one and only one instance of an object is created

Encapsulates inter-changeable behavior and uses delegation to decide which to use

04/19/23University of Kansas

32

04/19/23University of Kansas

Page 33: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

33

Patterns & Definitions – Group 1

Strategy Observer Singleton

Allows objects to be notified when state changes

Ensures one and only one instance of an object is created

Encapsulates inter-changeable behavior and uses delegation to decide which to use

04/19/23University of Kansas

33

04/19/23University of Kansas

Page 34: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

34

Patterns & Definitions – Group 1

Strategy Observer Singleton

Allows objects to be notified when state changes

Ensures one and only one instance of an object is created

Encapsulates inter-changeable behavior and uses delegation to decide which to use

04/19/23University of Kansas

34

04/19/23University of Kansas

Page 35: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

35

Decorator Definition

Attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to sub-classing for extending

functionality.

04/19/23University of Kansas

Page 36: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Design Principles

Identify the aspects of your application that vary and separate them from what stays the same

Program to an interface, not an implementation Favor composition over inheritance Strive for loosely coupled designs between objects that

interact Classes should be open for extension, but closed for

modification

04/19/23University of Kansas

36

Page 37: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Decorator – Class diagram

class Decorator

Component

+ methodA() : void+ methodB() : void

ConcreteComponent

+ methodA() : void+ methodB() : void

Decorator

+ methodA() : void+ methodB() : void

ConcreteDecoratorA

- wrappedObj: Component

+ methodA() : void+ methodB() : void+ newBehavior() : void

ConcreteDecoratorB

- wrappedObj: Component

+ methodA() : void+ methodB() : void

Page 38: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

38

Decorator - Problem

class Decorator

Beve rage

- description: String- milk: boolean- soy: boolean- whip: boolean

+ cost() : double{//Add all the condiment's costs to the beverage cost//The boolean methods help in determining if the condiments//have been added to the beverage.//return the total cost}

+ getDescription() : String+ hasMilk() : boolean+ hasSoy() : boolean+ hasWhip() : boolean+ setMilk(boolean) : void+ setSoy(boolean) : void+ setWhip(boolean) : void

DarkRoast

+ cost() : double{ return 1.99 + super.cost() //return the beverage's cost and add it to the result of calling //the superclass, Beverage's cost}

+ DarkRoast () : void{ description = "Most Excellent Dark Roast"}

Espresso

+ cost() : double{ return 2.10 + super.cost();}

+ Espresso() : void{ description = "Very fine Espresso"}

04/19/23University of Kansas

Page 39: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

39

Decorator - Solution

class Decorator

Beverage

- description: String = "Unknown Beverage"

+ cost() : double{//An abstract method. Implemented in the subclasses.}

+ getDescription() : String{ return description;}

DarkRoast

+ cost() : double{ return 1.99;}

+ DarkRoast() : void{ description = "Most Excellent Dark Roast"}

Espresso

+ cost() : double{ return 2.10 ;}

+ Espresso() : void{ description = "Very fine Espresso"}

CondimentDecorator

+ getDescription() : String{ //abstract method..Do nothing}

Mocha

- beverage: Beverage

+ cost() : double{ //Adds the cost of the condiment to the cost of the decorated beverage return .20 + beverage.cost();

}+ getDescription() : String

{ //Attaches the name of the condiment to the beverage name return beverage.getDescription + ", Mocha";}

+ Mocha(Beverage) : void{ //Stores a reference to the Beverage in consideration. this.beverage = beverage;}

Milk

- beverage: Beverage

+ cost() : double+ getDescription() : String

04/19/23University of Kansas

Page 40: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

40

Decorator

Pros Extends class functionality at runtime Helps in building flexible systems Works great if coded against the abstract component type

Cons Results in problems if there is code that relies on the

concrete component’s type

04/19/23University of Kansas

Page 41: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

41

Proxy Definition

Provides a surrogate or placeholder for another object to control access to it

04/19/23University of Kansas

Page 42: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

42

Proxy – Class diagram

04/19/23University of Kansas

class Proxy

ClientSubject

+ Request() : void

RealSubject

+ Request() : void

Proxy

+ Request() : void

realSubject.Request()

Page 43: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

43

Proxy - Problem

class Proxy

«interface»Image

+ displayImage() : void

RealImage

- filename: String

+ displayImage() : void{ //Display the image}

- loadImageFromDisk() : void{ //Potentially expensive operation}

+ RealImage(String) : void{ this.filename = filename; loadImageFromDisk();}

NoProxyExample

+ main() : void{ //Instantiate the image object //Instantiating it loads the image too. //Display the image}

uses

04/19/23University of Kansas

Page 44: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Proxy - Solution

class Proxy

«interface»Image

+ displayImage() : void

RealImage

- filename: String

+ displayImage() : void{ //Display the image}

- loadImageFromDisk() : void{ //Potentially expensive operation}

+ RealImage(String) : void{ this.filename = filename; loadImageFromDisk();}

ProxyExample

+ main() : void{ //Instantiates the ProxyImage //Invokes the displayImage method of ProxyImage }

ProxyImage

- filename: String- image: Image

+ displayImage() : void{ //Only if image is not already loaded, instantiate it. //Saves the expensive loading time. if (image == null) image = new RealImage (filename); image.displayImage();}

+ ProxyImage(String) : void

displayImage

Page 45: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

45

Proxy

Pros Prevents memory wastage Creates expensive objects on demand

Cons Adds complexity when trying to ensure freshness

04/19/23University of Kansas

Page 46: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

46

Facade Definition

Provides a unified interface to a set of interfaces in a subsystem. Façade defines a higher level interface that makes the subsystem easier to

use.

04/19/23University of Kansas

Page 47: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Design Principles

Identify the aspects of your application that vary and separate them from what stays the same

Program to an interface, not an implementation Favor composition over inheritance Strive for loosely coupled designs between objects that

interact Classes should be open for extension, but closed for

modification Principle of least knowledge – talk only to your immediate

friends

04/19/23University of Kansas

47

Page 48: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

48

Façade – Class diagram

04/19/23University of Kansas

class Facade

Facade

+ doSomething() : void{ //Instantiate Class1 //Instantiate Class2 //do Class1's stuff //do Class2's stuff}

Classs1

+ doStuff() : void{ //Do stuff}

Class2

+ doStuff() : void{ //Do stuff}

Client

+ doSomething() : void{ //Instantiate Facade //Do something}

doSomething

Page 49: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

49

Façade - Problem

class Facade

Memory

+ load(long, byte[]) : void

HardDrive

+ read(long, byte[]) : byte[]

CPU

+ execute() : void+ freeze() : void+ jump() : void

NonFacadeExample

+ main() : void{ //Instantiate the HardDrive object //Instanitate the CPU object //Instantiate the Memory object //Call the CPU's freeze method //Call the Memory's load method //Call the CPU's jump method //Call the CPU's execute method}

uses

uses

uses

04/19/23University of Kansas

Page 50: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Façade - Solution

class Facade

Memory

+ load(long, byte[]) : void

HardDrive

+ read(long, byte[]) : byte[]

CPU

+ execute() : void+ freeze() : void+ jump() : void

FacadeExample

+ main() : void{ //Instantiate the Computer facade object //Call the Computer's startComputer method}

Computer

+ startComputer() : void{ //Instantiate the HardDrive object //Instanitate the CPU object //Instantiate the Memory object //Call the CPU's freeze method //Call the Memory's load method //Call the CPU's jump method //Call the CPU's execute method }

startComputer

Page 51: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

51

Facade

Pros Makes code easier to use and understand Reduces dependencies on classes Decouples a client from a complex system

Cons Results in more rework for improperly designed Façade class Increases complexity and decreases runtime performance

for large number of Façade classes

04/19/23University of Kansas

Page 52: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

52

Adapter Definition

Converts the interface of a class into another interface the clients expect. Adapter lets

classes work together that couldn’t otherwise because of incompatible interfaces.

04/19/23University of Kansas

Page 53: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

53

Adapter – Class diagram

class Adapter

Client

«interface»Target

+ request() : void

Adapter

+ request() : void

Adaptee

+ specificRequest() : void

composed with

only sees the target interface

04/19/23University of Kansas

Page 54: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

54

Adapter - Problem

class Adapter

NoAdapterExample

+ main() : void{ //Instantiates a SquarePeg //Calls SquarePeg's insert() method - Successful //Instantiate a RoundPeg //Only has knowledge of the insert() method of pegs //The RoundPeg only implements insertIntoHole() //It does not implement insert() //Call to insert() method on RoundPeg results in error}

SquarePeg

+ insert(String) : void{ //Insert string}

RoundPeg

+ insertIntoHole(String) : void{ //Insert string}

insert - successful

insert - unsuccessful

04/19/23University of Kansas

Page 55: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Adapter - Solution

class Adapter

AdapterExample

+ main() : void{ //Instantiates a SquarePeg //Calls SquarePeg's insert() method - Successful //Instantiate a new PegAdapter object //Pass it the RoundPeg object reference //Invoke the PegAdapter's insert() method //Indirectly the RoundPeg object's insertIntoHole() method gets invoked}

SquarePeg

+ insert(String) : void{ //Insert string}

RoundPeg

+ insertIntoHole(String) : void{ //Insert string}

insert - successful

PegAdapter

- roundPeg: RoundPeg

+ insert(String) : void{ //Invoke the roundPeg's insertIntoHole() method}

+ PegAdapter(RoundPeg) : void{ //Set the roundPeg referenceto RoundPeg object}

insert - successful

Page 56: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

56

Adapter

Pros Increases code reuse Encapsulates the interface change Handles legacy code

Cons Increases complexity for large number of changes

04/19/23University of Kansas

Page 57: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

57

Patterns & Definitions – Group 2

DecoratorProxyFaçadeAdapter

Simplifies the interface of a set of classes

Wraps an object and provides an interface to it

Wraps an object to provide new behavior

Wraps an object to control access to it

04/19/23University of Kansas

57

04/19/23University of Kansas

Page 58: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

58

Patterns & Definitions – Group 2

DecoratorProxyFaçadeAdapter

Simplifies the interface of a set of classes

Wraps an object and provides an interface to it

Wraps an object to provide new behavior

Wraps an object to control access to it

04/19/23University of Kansas

58

04/19/23University of Kansas

Page 59: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

59

Patterns & Definitions – Group 2

DecoratorProxyFaçadeAdapter

Simplifies the interface of a set of classes

Wraps an object and provides an interface to it

Wraps an object to provide new behavior

Wraps an object to control access to it

04/19/23University of Kansas

59

04/19/23University of Kansas

Page 60: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

60

Patterns & Definitions – Group 2

DecoratorProxyFaçadeAdapter

Simplifies the interface of a set of classes

Wraps an object and provides an interface to it

Wraps an object to provide new behavior

Wraps an object to control access to it

04/19/23University of Kansas

60

04/19/23University of Kansas

Page 61: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

61

Patterns & Definitions – Group 2

DecoratorProxyFaçadeAdapter

Simplifies the interface of a set of classes

Wraps an object and provides an interface to it

Wraps an object to provide new behavior

Wraps an object to control access to it

04/19/23University of Kansas

61

04/19/23University of Kansas

Page 62: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

62

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

04/19/23University of Kansas

62

04/19/23University of Kansas

Page 63: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

63

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

Behavioral

04/19/23University of Kansas

63

04/19/23University of Kansas

Page 64: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

64

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

BehavioralBehavioral

04/19/23University of Kansas

64

04/19/23University of Kansas

Page 65: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

65

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

BehavioralBehavioralCreational

04/19/23University of Kansas

65

04/19/23University of Kansas

Page 66: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

66

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

BehavioralBehavioralCreationalStructural

04/19/23University of Kansas

66

04/19/23University of Kansas

Page 67: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

67

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

BehavioralBehavioralCreationalStructuralStructural

04/19/23University of Kansas

67

04/19/23University of Kansas

Page 68: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

68

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

BehavioralBehavioralCreationalStructuralStructuralStructural

04/19/23University of Kansas

68

04/19/23University of Kansas

Page 69: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

69

Pattern Classification

StrategyObserverSingletonDecoratorProxyFaçadeAdapter

BehavioralBehavioralCreationalStructuralStructuralStructuralStructural

04/19/23University of Kansas

69

04/19/23University of Kansas

Page 70: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Conclusion - Design Principles

Identify the aspects of your application that vary and separate them from what stays the same

Program to an interface, not an implementation Favor composition over inheritance Strive for loosely coupled designs between objects that

interact Classes should be open for extension, but closed for

modification Principle of least knowledge – talk only to your immediate

friends

04/19/23University of Kansas

70

Page 71: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

71

Conclusion

Good Design MaintainabilityExtensibilityScalabilityTestabilityReusablilty

Design PrinciplesProgram to an interface, not an implementation

High cohesionLow couplingOpen-Closed

Separation of concerns

Design PatternsSingleton

Abstract FactoryDAO

StrategyDecorator

04/19/23University of Kansas

Page 72: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

72

References

Design Patterns: Elements of Reusable Object-Oriented Software. Gamma, Helm, Johnson, and Vlissides (GoF). Addison-Wesley, 1995.

Head First Design Patterns. Freeman and Freeman. O’REILLY, 2004.

Design Patterns Explained. Shalloway and Trott. Addison-Wesley, 2002.

Patterns of Enterprise Application Architecture. Fowler. Addison-Wesley, 2003.

Core J2EE Pattern Catalog, Sun Developer Network, http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

Object Oriented Software Construction. Meyer, Prentice Hall, 1988.

04/19/23

72

University of Kansas

Page 73: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

73

References

Wikipedia, The Free Encyclopedia http://en.wikipedia.org/wiki/Singleton_pattern http://en.wikipedia.org/wiki/Observer_pattern http://en.wikipedia.org/wiki/Strategy_pattern http://en.wikipedia.org/wiki/Decorator_pattern http://en.wikipedia.org/wiki/Design_Patterns http://en.wikipedia.org/wiki/Anti-pattern http://en.wikipedia.org/wiki/Open/closed_principle http://c2.com/ppr/wiki/JavaIdioms/JavaIdioms.html

04/19/23University of Kansas

Page 74: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Questions?

04/19/23University of Kansas

74

Page 75: PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.

Thank You!

04/19/23University of Kansas

75