Download presentation
Presentation is loading. Please wait.
Published byGeoffrey Holmes Modified over 9 years ago
1
CSC 313 – Advanced Programming Topics
2
Observer Pattern in Java Java ♥ Observer Pattern & uses everywhere Find pattern in JButton & ActionListener s Tracking mouse in Swing using Observer Pattern Much of the multi-threaded API uses this Event-based code needs Observers to work Not limited to Java; true for most OO languages
3
java.util.Observable Among original classes included in Java Works with java.util.Observer interface Observable manages Observers in code void addObserver(Observer o) void deleteObserver(Observer o) void deleteObservers() int countObservers()
4
Handling Updates Observable will support push model… void notifyObserver(Object arg) … and pull model can also be used void notifyObserver() boolean hasChanged() void clearChanged() void setChanged() Notifications sent to Observer ’s only method void update(Observable o, Object arg)
5
Using Observable Problem public class CSCClass { private Observable obs; // Lots of unimportant code here public void cancelClass() { obs.notifyObservers(“Go ski”); } }
6
Using Observable Problem public class CSCClass { private Observable obs; // Lots of unimportant code here public void cancelClass() { obs.notifyObservers(“Go ski”); } }
7
Using Observable Problem public class CSCClass { private Observable obs; // Lots of unimportant code here public void cancelClass() { obs.notifyObservers(“Go ski”); } }
8
Bad & Worse Design Decisions No update was sent
9
Bad & Worse Design Decisions No update was sent
10
Bad & Worse Design Decisions No update was sent; everyone went to class
11
Bad & Worse Design Decisions
12
Updated Code
13
Next Attempt public class CSCClass { private Observable obs; // Lots of unimportant code here public void cancelClass() { obs.setChanged(); obs.notifyObservers(“Go ski”); } }
14
Next Attempt
16
setChanged has protected access
17
%&#*@ Awful Design
18
setChanged & clearChanged protected access java.util package is sealed; cannot write class for it Can only be called & used from within subclass Must write subclass of Observable to use it As this is Java, that class cannot extend others Updates received in method of Observer : void update(Observable o, Object arg) This really means that can only push 1 object Kills point of push model since cannot push much
19
%&#*@ Awful Design setChanged & clearChanged protected access java.util package is sealed; cannot write class for it Can only be called & used from within subclass Must write subclass of Observable to use it As this is Java, that class cannot extend others Updates received in method of Observer : void update(Observable o, Object arg) This really means that can only push 1 object Kills point of push model since cannot push much Useless
20
Final Attempt public class CSCClass extends Observable { public void cancelClass() { setChanged(); notifyObservers(“Go ski”); } } public class Student implements Observer { public void update(Observable o, Object arg) { String s = (String)arg; if (s.equals(“Get here NOW!!!”)) // Go skiing else // Go to class; think about skiing } }
21
Final Attempt
25
Observable Pros & Cons Cons: Pros:
26
Observable Pros & Cons Cons: Need a subclass of Observable to use Must call setChange before notifyObservers Can push only 1 object to Observers Pros: Already has code to add & remove Observers Easy to rewrite and improve upon this design
27
For Next Lecture Two (short) readings available on web Will start looking into how code is optimized How does Java run & make programs faster? What can we do to make our code faster? Using final can be huge. Why would it matter? Lab #2 due in 1 week & available on Angel Make sure that you also check the grading rubric Help available in WTC206 during the lab time
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.