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

CSE460 Lecture 14

CSE460 Lecture 14

Software Analysis and Design
Decorator
(202103)

B546a9b97d993392e4b22b74b99b91fe?s=128

Javier Gonzalez
PRO

July 14, 2020
Tweet

Transcript

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

    Patterns - Decorator Dr. Javier Gonzalez-Sanchez javiergs@asu.edu 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 GoF Patterns

  4. jgs 00000001 Decorator

  5. 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.
  6. jgs 00000001 Decorator

  7. jgs 00000001 Decorator

  8. jgs 00000001 Component abstract class Component { public abstract void

    operation(); }
  9. jgs 00000001 ConcreteComponent class ConcreteComponent extends Component { @override public

    void operation() { System.out.print("ConcreteComponent-Operation()"); } }
  10. 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(); } } }
  11. jgs 00000001 ConcreteDecoratorA class ConcreteDecoratorA extends Decorator { @override public

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

    void operation() { super.operation(); addedBehavior(); System.out.println("ConcreteDecoratorB-Operation()"); } void addedBehavior() { } }
  13. 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(); } }
  14. 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()
  15. jgs 00000001 Scenario CompanionHelper CompanionTroll Companion

  16. jgs 00000001 Scenario CompanionHelper CompanionTroll Companion CompanionTrollHelper

  17. jgs 00000001 Scenario CompanionHelper CompanionTroll Companion CompanionTrollHelper

  18. jgs Example 1 Text Mode

  19. jgs 00000001 Decorator

  20. jgs 00000001 Main

  21. jgs 00000001 Companion public interface Companion { public void doSomething();

    }
  22. jgs 00000001 BasicCompanion public class BasicCompanion implements Companion { @Override

    public void doSomething() { System.out.print("Hello Student, "); } }
  23. 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(); } }
  24. jgs 00000001 HelperCompanion public class HelperCompanion extends CompanionDecorator { @Override

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

    public void doSomething(){ super.doSomething(); System.out.print(" I am here to cheer you."); } }
  26. jgs 00000001 Main

  27. jgs CSE 460 Software Analysis and Design Javier Gonzalez-Sanchez javiergs@asu.edu

    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.