Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CSE460 Lecture 14

CSE460 Lecture 14

Software Analysis and Design
Decorator
(202103)

Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. jgs CSE 460 Software Analysis and Design Lecture 14: Structural

    Patterns - Decorator Dr. Javier Gonzalez-Sanchez [email protected] javiergs.engineering.asu.edu | javiergs.com PERALTA 230U Office Hours: By appointment
  2. jgs 00000001 Announcement § Midterm Exam Wednesday March 10 During

    the lecture time. No exceptions § Final Exam Wednesday April 21 During the lecture time. No exceptions
  3. jgs 00000001 Decorator vs Inheritance § Both allow you to

    change how an object behaves § The decorator pattern can be used to make it possible to extend (decorate) the functionality of a certain object at runtime. § Inheritance adds behavior at compilation-time.
  4. jgs 00000001 ConcreteComponent class ConcreteComponent extends Component { @override public

    void operation() { System.out.print("ConcreteComponent-Operation()"); } }
  5. jgs 00000001 Decorator abstract class Decorator extends Component { protected

    Component component; public void setComponent(Component component) { this.component = component; } @override public void operation() { if (component != null) { component.operation(); } } }
  6. jgs 00000001 ConcreteDecoratorA class ConcreteDecoratorA extends Decorator { @override public

    void operation() { super.operation(); System.out.println("ConcreteDecoratorA-Operation()”); } }
  7. jgs 00000001 ConcreteDecoratorB class ConcreteDecoratorB extends Decorator { @override public

    void operation() { super.operation(); addedBehavior(); System.out.println("ConcreteDecoratorB-Operation()"); } void addedBehavior() { } }
  8. jgs 00000001 Main class MainApp { static void main() {

    // Create ConcreteComponent and two Decorators ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); // Link decorators d1.SetComponent(c); d2.SetComponent(d1); d2.Operation(); } }
  9. jgs 00000001 Main class MainApp { static void main() {

    // Create ConcreteComponent and two Decorators ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); // Link decorators d1.SetComponent(c); d2.SetComponent(d1); d2.Operation(); } } ConcreteComponent - Operation() ConcreteDecoratorA - Operation() ConcreteDecoratorB - Operation()
  10. jgs 00000001 BasicCompanion public class BasicCompanion implements Companion { @Override

    public void doSomething() { System.out.print("Hello Student, "); } }
  11. jgs 00000001 CompanionDecorator public class CompanionDecorator implements Companion { protected

    Companion c; public void add(Companion c){ this.c = c; } @Override public void doSomething() { this.c.doSomething(); } }
  12. jgs 00000001 HelperCompanion public class HelperCompanion extends CompanionDecorator { @Override

    public void doSomething(){ super.doSomething(); System.out.print(" I am here to help you. "); } }
  13. jgs 00000001 AffectiveCompanion public class AffectiveCompanion extends CompanionDecorator { @Override

    public void doSomething(){ super.doSomething(); System.out.print(" I am here to cheer you."); } }
  14. jgs CSE 460 Software Analysis and Design Javier Gonzalez-Sanchez [email protected]

    Fall 2020 Disclaimer. These slides can only be used as study material for the class CSE460 at ASU. They cannot be distributed or used for another purpose.