Sabloane de comportament
OBSERVER
Diagrama.
Exemple.
1.(J.Cooper)
Modurile de afisare sunt definite prin intermediul observatorilor ("Observers") si implementeaza interfata:
abstract interface Observer
Datele sunt referite drept "Subiect" si implementeaza:
abstract interface Subject
Fie un program al carui Subiect ("data repository") este reprezentat de fereastra:
implementata de codul urmator:
public class Watch2L extends Jframe
implements ActionListener, ItemListener, Subject
//se creaza doi observatori: unul care afiseaza culoarea si numele sau, si altul care adauga //culoarea intr-o lista:
//---------create observers---------
ColorFrame cframe = new ColorFrame(this);
ListFrame lframe = new ListFrame(this);
//la fiecare actionare a unui buton radio, se apeleaza metoda sendNotify a fiecarui Observator care //si-a inregistrat interesul fata de datele din Subiect:
public void itemStateChanged(ItemEvent e)
private void notifyObservers(JRadioButton rad)
Programul final arata astfel:
//Clasele ce definesc Observatorii
class ColorFrame extends Jframe implements Observer
public void sendNotify(String s)
public void paint(Graphics g)
2. (B.Eckel)
Pe o grila sunt plasate patratele de diferite culori. Cand se selecteaza cu mouse-ul o patratica, toate casutele adiacente isi schimba culoarea in cea a casutei selectate.
//: observer:BoxObserver.java
// Demonstration of Observer pattern using
// Java's built-in observer classes.
package observer;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
// You must inherit a new type of Observable:
class BoxObservable extends Observable
public class BoxObserver extends JFrame
public static void main(String[] args)
class OCBox extends JPanel implements Observer ;
static Random rand = new Random();
static final Color newColor()
OCBox(int x, int y, Observable notifier)
public void paintComponent(Graphics g)
class ML extends MouseAdapter
public void update(Observable o, Object arg)
private final boolean nextTo(OCBox b)
Tema 4. (B. Eckel) Creati un sistem Observer minimal utilizand java.util.Timer in interiorul clasei Observable, pentru a genera evenimente ce sunt raportate catre Observers (clasele observator). Creati cativa observatori (folosind clase interioare anonime) si inregistrati-i cu Observable si aratati ca sunt apelati cand apar evenimentele de la Timer.