![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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022043017/5f396e00f33b5e65fd7ecf80/html5/thumbnails/12.jpg)
REAL WORLD EXAMPLE
http://www.mcmaster.com/#ball-valves/=anitas
McMaster-Carr website