🤿

Decorator Design Pattern

Class
Structural Design Pattern
Text
Last Revised
Oct 15, 2024
Created
Oct 14, 2024 05:31 PM
Priority Level
AI summary
 
This pattern is part of the structural design patterns and is typically used when subclassing would become too complex, or when you want to enhance the functionality of certain objects without affecting others of the same class.
notion image
Component
package lld.designpattern.behaviour.decorator; public interface Pizza { public double getPrice(); public String getDescription(); }
 
ConcreteComponent
package lld.designpattern.behaviour.decorator; public class BasePizza implements Pizza { @Override public double getPrice() { return 100.0; } @Override public String getDescription() { System.out.println("calling base pizza description"); return "Plain Pizza"; } }
 
Decorator
package lld.designpattern.behaviour.decorator; public abstract class PizzaDecorator implements Pizza { protected Pizza tempPizza; public PizzaDecorator(Pizza pizza){ this.tempPizza = pizza; } @Override public double getPrice() { return tempPizza.getPrice(); } @Override public String getDescription() { return tempPizza.getDescription(); } }
 
ConcreteDecorator 1
package lld.designpattern.behaviour.decorator; public class OlivesPizza extends PizzaDecorator{ public OlivesPizza(Pizza pizza) { super(pizza); } @Override public String getDescription() { System.out.println("calling olive pizza description"); return tempPizza.getDescription()+", Olive"; } @Override public double getPrice() { return super.getPrice()+40.0; } }
 
ConcreteDecorator 2
package lld.designpattern.behaviour.decorator; public class CheesePizza extends PizzaDecorator{ public CheesePizza(Pizza pizza) { super(pizza); } @Override public String getDescription() { return tempPizza.getDescription()+", Cheese"; } @Override public double getPrice() { return tempPizza.getPrice()+30.0; } }
 
💡
Why tempPizza is protected protected Pizza tempPizza;
Ans: So that only subclass can access this variable
 
Built with Potion.so