decorator - classes.cs.uchicago.edu€¦ · what is the decorator pattern? •a design pattern that...

12
DECORATOR Design Pattern Dray Brown January 19, 2011

Upload: others

Post on 11-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

DECORATOR Design Pattern

Dray Brown January 19, 2011

Page 2: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

WHAT IS THE DECORATOR PATTERN?

• A design pattern that allows additional responsibilities to be added to a single object dynamically.

• New functionality can be added to an object without modifying similar objects.

• Done by adding a transparent layer (also known as a “Wrapper”).

Page 3: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

Component

Concrete Component Decorator

ConcreteDecoratorA ConcreteDecoratorB

(Object Interface)

(The Objects) (Reference to Component)

(new object responsibility) (new object responsibility)

Mirror

Page 4: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

Car

I am a car.

Page 5: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

Car

I am a car.

I am sporty!

Page 6: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

Car

I am a car.I am expensive.

Page 7: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

Car

I am a car.I am expensive.I am sporty!

Page 8: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

CAR DESCRIPTIONS

• Standard car statement - “I am a car.”

• Sporty car statement - “I am sporty!”

• Expensive car statement - “I am expensive.”

• Expensive & Sporty car statement - “I am expensive. I am sporty!”

Car“I am a car”

Page 9: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

Component

Concrete Component Decorator

ConcreteDecoratorA ConcreteDecoratorB

(Object Interface)

(The Objects) (Reference to Component)

(new object responsibility) (new object responsibility)

“ I am a car.”

Car Component

“ I am a car.”

Mirror

“ I am a car.”“I am sporty!”

“ I am a car.”“I am expensive.”

Page 10: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

IMPLEMENTATION USING JAVA

public class Car { public Car(){ } public String statement(){ return "I am a car."; } }

public abstract class Decorator extends Car{ public abstract String statement();}

public class Sporty extends Decorator{Car auto; public Sporty (Car sport){ auto = sport; } public String statement(){ return auto.statement() + " I am sporty."; }}

Page 11: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

public class DecorateMe { //Tester public static void main (String [] args){ Car mercedes = new Car(); mercedes = new Expensive(mercedes); Car honda = new Car(); Car mitsubishi = new Car(); mitsubishi = new Sporty(mitsubishi); Car porsche = new Car(); porsche = new Sporty(porsche); porsche = new Expensive(porsche); System.out.println("I am a Honda. " +honda.statement()); System.out.println("I am a Mitsubishi, " +mitsubishi.statement()); System.out.println("I am a Mercedes. " +mercedes.statement()); System.out.println("I am a Porsche. " +porsche.statement()); } }

public class Expensive extends Car { Car auto; public Expensive (Car das){ auto = das; } public String statement(){ return auto.statement() + " I am expensive."; }}

Page 12: Decorator - classes.cs.uchicago.edu€¦ · WHAT IS THE DECORATOR PATTERN? •A design pattern that allows additional responsibilities to be added to a single object dynamically

REAL WORLD EXAMPLE

http://www.mcmaster.com/#ball-valves/=anitas

McMaster-Carr website