Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

jgs 564 00001000 Homework Read: § Design Patterns: Abstraction and Reuse of Object-Oriented Design Gamma, Helm, Johnson, Vlissides § European Conference on Object-Oriented Programming October 1993 § This will become:

Slide 3

Slide 3 text

jgs Previously Object-Oriented Design and Programming

Slide 4

Slide 4 text

jgs 564 00001000 Design Principles There are five key design principles to consider in Object-Oriented: § Single Responsibility Principle (SRP) § Open-Closed Principle (OCP) § Liskov Substitution Principle (LSP) § Interface Segregation Principle (ISP) § Dependency Inversion Principle (DIP)

Slide 5

Slide 5 text

jgs 564 00001000 DIP Example What about ISP?

Slide 6

Slide 6 text

jgs Patterns Software Design

Slide 7

Slide 7 text

jgs 564 00001000 Not Everything that Can be … Should be …

Slide 8

Slide 8 text

jgs 564 00001000 Definition § Design patterns are solutions to software design problems you find again and again in real-world application development. § Patterns are about reusable designs and interactions between objects. § The 23 Gang of Four (GoF) patterns are generally considered the foundation for all other patterns (Gamma, Helm, Johnson, and Vlissides).

Slide 9

Slide 9 text

jgs 564 00001000 Timeline 1989 Beck OO Thinking Architecture 1993 Gamma et al. GoF Patterns 1994

Slide 10

Slide 10 text

jgs 564 00001000 GoF Patterns

Slide 11

Slide 11 text

jgs 564 00001000 GoF Patterns

Slide 12

Slide 12 text

jgs Observer Software Design

Slide 13

Slide 13 text

jgs 564 00001000 Observer

Slide 14

Slide 14 text

jgs 564 00001000 Observer

Slide 15

Slide 15 text

jgs 564 00001000 Observer

Slide 16

Slide 16 text

jgs 564 00001000 Subject import java.util.LinkedList; public abstract class Subject { private LinkedList observers = new LinkedList(); public void addObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void notifying() { for (Observer ob : observers) { ob.update(this); } } }

Slide 17

Slide 17 text

jgs 564 00001000 Observer public abstract class Observer { public abstract void update(Subject s); }

Slide 18

Slide 18 text

jgs 564 00001000 ConcreteSubject class ConcreteSubject extends Subject { private String data; public String getData() { return data; } public void setData(String s) { data = s; notifying(); } }

Slide 19

Slide 19 text

jgs 564 00001000 ConcreteObserver class ConcreteObserver extends Observer { @Override public void update(Subject s) { String info = ((ConcreteSubject)s).getData(); System.out.println("Subject is doing this: "+info); } }

Slide 20

Slide 20 text

jgs 564 00001000 Main public class Main { public static void main(String[]a) { // Configure pattern ConcreteSubject s = new ConcreteSubject(); ConcreteObserver eyeOne = new ConcreteObserver(); ConcreteObserver eyeTwo = new ConcreteObserver(); s.addObserver(eyeOne); s.addObserver(eyeTwo); // Change subject s.setData("ABC"); s.setData("XYZ"); } }

Slide 21

Slide 21 text

jgs 564 00001000 Main public class Main { public static void main(String[]a) { // Configure pattern ConcreteSubject s = new ConcreteSubject(); ConcreteObserver eyeOne = new ConcreteObserver(); ConcreteObserver eyeTwo = new ConcreteObserver(); s.addObserver(eyeOne); s.addObserver(eyeTwo); // Change subject s.setData("ABC"); s.setData("XYZ"); } }

Slide 22

Slide 22 text

jgs 564 00001000 Observer

Slide 23

Slide 23 text

jgs 564 00001000 Questions about Observer

Slide 24

Slide 24 text

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.