<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FDesign_Pattern%2FObservable_and_Observer</id>
		<title>Java Tutorial/Design Pattern/Observable and Observer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FDesign_Pattern%2FObservable_and_Observer"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Observable_and_Observer&amp;action=history"/>
		<updated>2026-04-10T13:02:51Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Observable_and_Observer&amp;diff=4454&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Observable_and_Observer&amp;diff=4454&amp;oldid=prev"/>
				<updated>2010-06-01T05:02:24Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:02, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Observable_and_Observer&amp;diff=4453&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Observable_and_Observer&amp;diff=4453&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  An object may be observed by two or more observers. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Observable;&lt;br /&gt;
import java.util.Observer;&lt;br /&gt;
class Watcher1 implements Observer {&lt;br /&gt;
  public void update(Observable obj, Object arg) {&lt;br /&gt;
    System.out.println(&amp;quot;update() called, count is &amp;quot; + ((Integer) arg).intValue());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Watcher2 implements Observer {&lt;br /&gt;
  public void update(Observable obj, Object arg) {&lt;br /&gt;
    if (((Integer) arg).intValue() == 0)&lt;br /&gt;
      System.out.println(&amp;quot;Done&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class BeingWatched extends Observable {&lt;br /&gt;
  void counter(int period) {&lt;br /&gt;
    for (; period &amp;gt;= 0; period--) {&lt;br /&gt;
      setChanged();&lt;br /&gt;
      notifyObservers(new Integer(period));&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(100);&lt;br /&gt;
      } catch (InterruptedException e) {&lt;br /&gt;
        System.out.println(&amp;quot;Sleep interrupted&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MainClass {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    BeingWatched observed = new BeingWatched();&lt;br /&gt;
    Watcher1 observing1 = new Watcher1();&lt;br /&gt;
    Watcher2 observing2 = new Watcher2();&lt;br /&gt;
    observed.addObserver(observing1);&lt;br /&gt;
    observed.addObserver(observing2);&lt;br /&gt;
    observed.counter(10);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Demonstrate the Observable class and the Observer interface. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Observable;&lt;br /&gt;
import java.util.Observer;&lt;br /&gt;
class Watcher implements Observer {&lt;br /&gt;
  public void update(Observable obj, Object arg) {&lt;br /&gt;
    System.out.println(&amp;quot;update() called, count is &amp;quot; + ((Integer) arg).intValue());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class BeingWatched extends Observable {&lt;br /&gt;
  void counter(int period) {&lt;br /&gt;
    for (; period &amp;gt;= 0; period--) {&lt;br /&gt;
      setChanged();&lt;br /&gt;
      notifyObservers(new Integer(period));&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(100);&lt;br /&gt;
      } catch (InterruptedException e) {&lt;br /&gt;
        System.out.println(&amp;quot;Sleep interrupted&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ObserverDemo {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    BeingWatched observed = new BeingWatched();&lt;br /&gt;
    Watcher observing = new Watcher();&lt;br /&gt;
    observed.addObserver(observing);&lt;br /&gt;
    observed.counter(10);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Demonstration of &amp;quot;observer&amp;quot; pattern. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Observable;&lt;br /&gt;
import java.util.Observer;&lt;br /&gt;
class Library {&lt;br /&gt;
  private boolean isOpen;&lt;br /&gt;
  private OpenNotifier oNotify = new OpenNotifier();&lt;br /&gt;
  private CloseNotifier cNotify = new CloseNotifier();&lt;br /&gt;
  public Library() {&lt;br /&gt;
    isOpen = false;&lt;br /&gt;
  }&lt;br /&gt;
  public void open() { // Opens its petals&lt;br /&gt;
    isOpen = true;&lt;br /&gt;
    oNotify.notifyObservers();&lt;br /&gt;
    cNotify.open();&lt;br /&gt;
  }&lt;br /&gt;
  public void close() { // Closes its petals&lt;br /&gt;
    isOpen = false;&lt;br /&gt;
    cNotify.notifyObservers();&lt;br /&gt;
    oNotify.close();&lt;br /&gt;
  }&lt;br /&gt;
  public Observable opening() {&lt;br /&gt;
    return oNotify;&lt;br /&gt;
  }&lt;br /&gt;
  public Observable closing() {&lt;br /&gt;
    return cNotify;&lt;br /&gt;
  }&lt;br /&gt;
  private class OpenNotifier extends Observable {&lt;br /&gt;
    private boolean alreadyOpen = false;&lt;br /&gt;
    public void notifyObservers() {&lt;br /&gt;
      if (isOpen &amp;amp;&amp;amp; !alreadyOpen) {&lt;br /&gt;
        setChanged();&lt;br /&gt;
        super.notifyObservers();&lt;br /&gt;
        alreadyOpen = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void close() {&lt;br /&gt;
      alreadyOpen = false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private class CloseNotifier extends Observable {&lt;br /&gt;
    private boolean alreadyClosed = false;&lt;br /&gt;
    public void notifyObservers() {&lt;br /&gt;
      if (!isOpen &amp;amp;&amp;amp; !alreadyClosed) {&lt;br /&gt;
        setChanged();&lt;br /&gt;
        super.notifyObservers();&lt;br /&gt;
        alreadyClosed = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void open() {&lt;br /&gt;
      alreadyClosed = false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Student {&lt;br /&gt;
  private String name;&lt;br /&gt;
  private OpenObserver openObsrv = new OpenObserver();&lt;br /&gt;
  private CloseObserver closeObsrv = new CloseObserver();&lt;br /&gt;
  public Student(String nm) {&lt;br /&gt;
    name = nm;&lt;br /&gt;
  }&lt;br /&gt;
  private class OpenObserver implements Observer {&lt;br /&gt;
    public void update(Observable ob, Object a) {&lt;br /&gt;
      System.out.println(&amp;quot;Student &amp;quot; + name + &amp;quot;&amp;quot;s study time!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private class CloseObserver implements Observer {&lt;br /&gt;
    public void update(Observable ob, Object a) {&lt;br /&gt;
      System.out.println(&amp;quot;Student &amp;quot; + name + &amp;quot;&amp;quot;s bed time!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Observer openObserver() {&lt;br /&gt;
    return openObsrv;&lt;br /&gt;
  }&lt;br /&gt;
  public Observer closeObserver() {&lt;br /&gt;
    return closeObsrv;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Professor {&lt;br /&gt;
  private String name;&lt;br /&gt;
  private OpenObserver openObsrv = new OpenObserver();&lt;br /&gt;
  private CloseObserver closeObsrv = new CloseObserver();&lt;br /&gt;
  public Professor(String nm) {&lt;br /&gt;
    name = nm;&lt;br /&gt;
  }&lt;br /&gt;
  private class OpenObserver implements Observer {&lt;br /&gt;
    public void update(Observable ob, Object a) {&lt;br /&gt;
      System.out.println(&amp;quot;Professor &amp;quot; + name + &amp;quot;&amp;quot;s research time!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private class CloseObserver implements Observer {&lt;br /&gt;
    public void update(Observable ob, Object a) {&lt;br /&gt;
      System.out.println(&amp;quot;Professor &amp;quot; + name + &amp;quot;&amp;quot;s bed time!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Observer openObserver() {&lt;br /&gt;
    return openObsrv;&lt;br /&gt;
  }&lt;br /&gt;
  public Observer closeObserver() {&lt;br /&gt;
    return closeObsrv;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class ObservedFlower {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Library f = new Library();&lt;br /&gt;
    Student ba = new Student(&amp;quot;A&amp;quot;), bb = new Student(&amp;quot;B&amp;quot;);&lt;br /&gt;
    Professor ha = new Professor(&amp;quot;A&amp;quot;), hb = new Professor(&amp;quot;B&amp;quot;);&lt;br /&gt;
    f.opening().addObserver(ha.openObserver());&lt;br /&gt;
    f.opening().addObserver(hb.openObserver());&lt;br /&gt;
    f.opening().addObserver(ba.openObserver());&lt;br /&gt;
    f.opening().addObserver(bb.openObserver());&lt;br /&gt;
    f.closing().addObserver(ha.closeObserver());&lt;br /&gt;
    f.closing().addObserver(hb.closeObserver());&lt;br /&gt;
    f.closing().addObserver(ba.closeObserver());&lt;br /&gt;
    f.closing().addObserver(bb.closeObserver());&lt;br /&gt;
    f.opening().deleteObserver(hb.openObserver());&lt;br /&gt;
    f.open();&lt;br /&gt;
    f.open();&lt;br /&gt;
    f.closing().deleteObserver(ba.closeObserver());&lt;br /&gt;
    f.close();&lt;br /&gt;
    f.close();&lt;br /&gt;
    f.opening().deleteObservers();&lt;br /&gt;
    f.open();&lt;br /&gt;
    f.close();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Observable and Observer Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Observable;&lt;br /&gt;
import java.util.Observer;&lt;br /&gt;
class MyObservable extends Observable {&lt;br /&gt;
  public void drinkPotion() {&lt;br /&gt;
    name = &amp;quot;jexp &amp;quot;;&lt;br /&gt;
    setChanged();&lt;br /&gt;
    notifyObservers();&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return name;&lt;br /&gt;
  }&lt;br /&gt;
  private String name = &amp;quot;jexp&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
class Person implements Observer {&lt;br /&gt;
  public Person(String name, String says) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
    this.says = says;&lt;br /&gt;
  }&lt;br /&gt;
  public void update(Observable thing, Object o) {&lt;br /&gt;
    System.out.println(&amp;quot;It&amp;quot;s &amp;quot; + ((MyObservable) thing).getName() + &amp;quot;\n&amp;quot; + name + &amp;quot;: &amp;quot; + says);&lt;br /&gt;
  }&lt;br /&gt;
  private String name;&lt;br /&gt;
  private String says;&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    MyObservable man = new MyObservable();&lt;br /&gt;
    Observer[] crowd = { &lt;br /&gt;
        new Person(&amp;quot;A&amp;quot;, &amp;quot;a&amp;quot;),&lt;br /&gt;
        new Person(&amp;quot;B&amp;quot;, &amp;quot;b&amp;quot;),&lt;br /&gt;
        new Person(&amp;quot;C&amp;quot;, &amp;quot;c&amp;quot;),&lt;br /&gt;
        new Person(&amp;quot;D&amp;quot;, &amp;quot;d&amp;quot;),&lt;br /&gt;
        new Person(&amp;quot;E&amp;quot;, &amp;quot;e&amp;quot;) };&lt;br /&gt;
    for (Observer observer : crowd) {&lt;br /&gt;
      man.addObserver(observer);&lt;br /&gt;
    }&lt;br /&gt;
    man.drinkPotion();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;It&amp;quot;s jexp &lt;br /&gt;
E: e&lt;br /&gt;
It&amp;quot;s jexp &lt;br /&gt;
D: d&lt;br /&gt;
It&amp;quot;s jexp &lt;br /&gt;
C: c&lt;br /&gt;
It&amp;quot;s jexp &lt;br /&gt;
B: b&lt;br /&gt;
It&amp;quot;s jexp &lt;br /&gt;
A: a&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Timeout Observer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Licensed to the Apache Software Foundation (ASF) under one or more&lt;br /&gt;
 *  contributor license agreements.  See the NOTICE file distributed with&lt;br /&gt;
 *  this work for additional information regarding copyright ownership.&lt;br /&gt;
 *  The ASF licenses this file to You under the Apache License, Version 2.0&lt;br /&gt;
 *  (the &amp;quot;License&amp;quot;); you may not use this file except in compliance with&lt;br /&gt;
 *  the License.  You may obtain a copy of the License at&lt;br /&gt;
 *&lt;br /&gt;
 *      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 *&lt;br /&gt;
 *  Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 *  distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 *  See the License for the specific language governing permissions and&lt;br /&gt;
 *  limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.util.Enumeration;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
/**&lt;br /&gt;
 * Generalization of &amp;lt;code&amp;gt;ExecuteWatchdog&amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @see org.apache.rumons.exec.ExecuteWatchdog&lt;br /&gt;
 */&lt;br /&gt;
public class Watchdog implements Runnable {&lt;br /&gt;
  private Vector observers = new Vector(1);&lt;br /&gt;
  private final long timeout;&lt;br /&gt;
  private boolean stopped = false;&lt;br /&gt;
  public Watchdog(final long timeout) {&lt;br /&gt;
    if (timeout &amp;lt; 1) {&lt;br /&gt;
      throw new IllegalArgumentException(&amp;quot;timeout must not be less than 1.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    this.timeout = timeout;&lt;br /&gt;
  }&lt;br /&gt;
  public void addTimeoutObserver(final TimeoutObserver to) {&lt;br /&gt;
    observers.addElement(to);&lt;br /&gt;
  }&lt;br /&gt;
  public void removeTimeoutObserver(final TimeoutObserver to) {&lt;br /&gt;
    observers.removeElement(to);&lt;br /&gt;
  }&lt;br /&gt;
  protected final void fireTimeoutOccured() {&lt;br /&gt;
    Enumeration e = observers.elements();&lt;br /&gt;
    while (e.hasMoreElements()) {&lt;br /&gt;
      ((TimeoutObserver) e.nextElement()).timeoutOccured(this);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public synchronized void start() {&lt;br /&gt;
    stopped = false;&lt;br /&gt;
    Thread t = new Thread(this, &amp;quot;WATCHDOG&amp;quot;);&lt;br /&gt;
    t.setDaemon(true);&lt;br /&gt;
    t.start();&lt;br /&gt;
  }&lt;br /&gt;
  public synchronized void stop() {&lt;br /&gt;
    stopped = true;&lt;br /&gt;
    notifyAll();&lt;br /&gt;
  }&lt;br /&gt;
  public synchronized void run() {&lt;br /&gt;
    final long until = System.currentTimeMillis() + timeout;&lt;br /&gt;
    long now;&lt;br /&gt;
    while (!stopped &amp;amp;&amp;amp; until &amp;gt; (now = System.currentTimeMillis())) {&lt;br /&gt;
      try {&lt;br /&gt;
        wait(until - now);&lt;br /&gt;
      } catch (InterruptedException e) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!stopped) {&lt;br /&gt;
      fireTimeoutOccured();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Interface for classes that want to be notified by Watchdog.&lt;br /&gt;
 * &lt;br /&gt;
 * @see org.apache.rumons.exec.Watchdog&lt;br /&gt;
 */&lt;br /&gt;
interface TimeoutObserver {&lt;br /&gt;
  /**&lt;br /&gt;
   * Called when the watchdow times out.&lt;br /&gt;
   * &lt;br /&gt;
   * @param w&lt;br /&gt;
   *          the watchdog that timed out.&lt;br /&gt;
   */&lt;br /&gt;
  void timeoutOccured(Watchdog w);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Watch What is Going On with the Observer Patterns ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
public class TestObserver {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Database database = new Database();&lt;br /&gt;
    Archiver archiver = new Archiver();&lt;br /&gt;
    Client client = new Client();&lt;br /&gt;
    Boss boss = new Boss();&lt;br /&gt;
    database.registerObserver(archiver);&lt;br /&gt;
    database.registerObserver(client);&lt;br /&gt;
    database.registerObserver(boss);&lt;br /&gt;
    database.editRecord(&amp;quot;delete&amp;quot;, &amp;quot;record 1&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Observer {&lt;br /&gt;
  public void update(String operation, String record);&lt;br /&gt;
}&lt;br /&gt;
interface Subject {&lt;br /&gt;
  public void registerObserver(Observer o);&lt;br /&gt;
  public void removeObserver(Observer o);&lt;br /&gt;
  public void notifyObservers();&lt;br /&gt;
}&lt;br /&gt;
class Database implements Subject {&lt;br /&gt;
  private Vector&amp;lt;Observer&amp;gt; observers;&lt;br /&gt;
  private String operation;&lt;br /&gt;
  private String record;&lt;br /&gt;
  public Database() {&lt;br /&gt;
    observers = new Vector&amp;lt;Observer&amp;gt;();&lt;br /&gt;
  }&lt;br /&gt;
  public void registerObserver(Observer o) {&lt;br /&gt;
    observers.add(o);&lt;br /&gt;
  }&lt;br /&gt;
  public void removeObserver(Observer o) {&lt;br /&gt;
    observers.remove(o);&lt;br /&gt;
  }&lt;br /&gt;
  public void notifyObservers() {&lt;br /&gt;
    for (int loopIndex = 0; loopIndex &amp;lt; observers.size(); loopIndex++) {&lt;br /&gt;
      Observer observer = (Observer) observers.get(loopIndex);&lt;br /&gt;
      observer.update(operation, record);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void editRecord(String operation, String record) {&lt;br /&gt;
    this.operation = operation;&lt;br /&gt;
    this.record = record;&lt;br /&gt;
    notifyObservers();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Client implements Observer {&lt;br /&gt;
  public Client() {&lt;br /&gt;
  }&lt;br /&gt;
  public void update(String operation, String record) {&lt;br /&gt;
    System.out.println(&amp;quot;The client says a &amp;quot; + operation + &amp;quot; operation was performed on &amp;quot; + record);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Boss implements Observer {&lt;br /&gt;
  public Boss() {&lt;br /&gt;
  }&lt;br /&gt;
  public void update(String operation, String record) {&lt;br /&gt;
    System.out.println(&amp;quot;The boss says a &amp;quot; + operation + &amp;quot; operation was performed on &amp;quot; + record);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Archiver implements Observer {&lt;br /&gt;
  public Archiver() {&lt;br /&gt;
  }&lt;br /&gt;
  public void update(String operation, String record) {&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;The archiver says a &amp;quot; + operation + &amp;quot; operation was performed on &amp;quot; + record);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>