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

CSE564 Lecture 17

CSE564 Lecture 17

Software Design
More Design Patterns
(202110)

Javier Gonzalez-Sanchez
PRO

September 17, 2020
Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. jgs
    CSE 564
    Software Design
    Lecture 17: More Patterns
    Dr. Javier Gonzalez-Sanchez
    [email protected]
    javiergs.engineering.asu.edu | javiergs.com
    PERALTA 230U
    Office Hours: By appointment

    View Slide

  2. jgs
    564 00010001
    GoF Patterns

    View Slide

  3. jgs
    Factory
    Wrapper of a constructor
    One entire object to be built in a single method call

    View Slide

  4. jgs
    564 00010001
    Abstract Factory

    View Slide

  5. jgs
    564 00010001
    Products
    public interface Shape {
    void draw();
    }
    public class RoundedRectangle implements Shape {
    public void draw() {
    System.out.println("Inside RoundedRectangle/draw() method.");
    }
    }
    public class RoundedSquare implements Shape {
    public void draw() {
    System.out.println("Inside RoundedSquare/draw() method.");
    }
    }
    public class Rectangle implements Shape {
    public void draw() {
    System.out.println("Inside Rectangle/draw() method.");
    }
    }

    View Slide

  6. jgs
    564 00010001
    Factories
    public abstract class AbstractFactory {
    Shape getShape(String shapeType) ;
    }
    public class ShapeFactory extends AbstractFactory {
    public Shape getShape(String shapeType){
    if(shapeType.equalsIgnoreCase("RECTANGLE")){
    return new Rectangle();
    }else if(shapeType.equalsIgnoreCase("SQUARE")){
    return new Square();
    }
    return null;
    }
    }

    View Slide

  7. jgs
    564 00010001
    Factories
    public class RoundedShapeFactory extends AbstractFactory {
    public Shape getShape(String shapeType){
    if(shapeType.equalsIgnoreCase("RECTANGLE")){
    return new RoundedRectangle();
    }else if(shapeType.equalsIgnoreCase("SQUARE")){
    return new RoundedSquare();
    }
    return null;
    }
    }

    View Slide

  8. jgs
    564 00010001
    Client
    public class Client {
    public static void main(String[] args) {
    AbstractFactory shapeFactory = new ShapeFactory();
    //get an object of Shape Rectangle
    Shape shape1 = shapeFactory.getShape("RECTANGLE");
    //call draw method of Shape Rectangle
    shape1.draw();
    //get an object of Shape Square
    Shape shape2 = shapeFactory.getShape("SQUARE");
    //call draw method of Shape Square
    shape2.draw(); ]
    //get shape factory
    AbstractFactory shapeFactory1 = new RoundedShapeFactory();
    //get an object of Shape Rectangle
    Shape shape3 = shapeFactory1.getShape("RECTANGLE");
    //call draw method of Shape Rectangle
    shape3.draw();
    //get an object of Shape Square
    Shape shape4 = shapeFactory1.getShape("SQUARE");
    //call draw method of Shape Square
    shape4.draw();
    }
    }

    View Slide

  9. jgs
    Test Yourselves

    View Slide

  10. jgs
    564 00010001
    Workspace.java (part 1 / 2)

    View Slide

  11. jgs
    564 00010001
    User
    D
    B
    A
    C

    View Slide

  12. jgs
    564 00010001
    The System
    D
    B
    A
    C
    random

    View Slide

  13. jgs
    Chain of Responsibility
    Avoid coupling the sender of a request to its receiver
    by giving more than one object a chance to handle the
    request.

    View Slide

  14. jgs
    564 00010001
    Chain of Responsibility

    View Slide

  15. jgs
    564 00010001
    Chain of Responsibility
    // Setup Chain of Responsibility
    Handler h1 = new ConcreteHandler2();
    Handler h2 = new ConcreteHandler2();
    Handler h3 = new ConcreteHandler1();
    h1.SetSuccessor(h2);
    h2.SetSuccessor(h3);
    // Generate and process request
    int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };
    foreach (int i=0; ih1.HandleRequest(request[i]);
    }

    View Slide

  16. jgs
    564 00010001
    Handler
    abstract class Handler {
    public abstract void HandleRequest(int request);
    }
    class ConcreteHandler1 extends Handler {
    public override void HandleRequest(int request) {
    if (request >= 0 && request < 10) {
    // code here…
    } else if (successor != null) {
    successor.HandleRequest(request);
    }
    }
    }

    View Slide

  17. jgs
    564 00010001
    Handler
    class ConcreteHandler2 extends Handler {
    protected Handler successor;
    public void setSuccessor(Handler successor) {
    this.successor = successor;
    }
    public override void HandleRequest(int request) {
    if (request >= 10 && request < 20) {
    // code here
    } else if (successor != null) {
    successor.HandleRequest(request);
    }
    }
    }

    View Slide

  18. jgs
    564 00010001
    Chain of Responsibility vs Composite vs Decorator

    View Slide

  19. jgs
    Test Yourselves

    View Slide

  20. jgs
    564 00010001
    The System
    D
    B
    A
    C
    D
    B
    A
    C
    Clustering
    TSP -Nearest Neighbor

    View Slide

  21. jgs
    564 00010001
    Questions

    View Slide

  22. jgs
    CSE 564 Software Design
    Javier Gonzalez-Sanchez, Ph.D.
    [email protected]
    Fall 2021
    Copyright. These slides can only be used as study material for the class CSE564 at ASU.
    They cannot be distributed or used for another purpose.

    View Slide