Minggu, 04 Desember 2016

[8] Observer di Design Pattern (Contoh Studi kasus Observer dari Sourcemaking.com)

Kesempatan kali ini saya akan mencoba menerapkan contoh observer di design pattern dari sourcemaking.com

Tapi akan lebih afdol apabila kita lebih tau tentang pengertian observer di design pattern terlebih dahulu

The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.(Wikipedia.com)


  
UML class diagram dari Observer

 Contoh penerapan dari observer sendiri mirip seperti pelelangan, dimana yang melelang seperti class subject sedangkan yang mengikuti lelang tersebut seperti concrete observer a, b, ..., dst.


 Kalau masih bingung dengan contoh diatas mari kita lihat contoh dari sourcemaking.com berikut

Program berbahasa java ini akan menjelaskan mengenai cara kerja observer.

Di program ini yang menjadi subject adalah SensorSystem, sedangkan Lighting, Gates dan Surveillance merupakan Concrete Observer A, B, dan C. Kemudian yang menotifikasi subject adalah Alarm Listener

Pada contoh ini saya akan memakai IDE java yaitu BlueJ



Source codenya seperti ini (diambil dari sourcemaking)
interface AlarmListener { public void alarm(); }

class SensorSystem {
   private java.util.Vector listeners = new java.util.Vector();

   public void register( AlarmListener al ) { listeners.addElement( al ); }
   public void soundTheAlarm() {
      for (java.util.Enumeration e=listeners.elements(); e.hasMoreElements(); )
         ((AlarmListener)e.nextElement()).alarm();
}  }

class Lighting implements AlarmListener {
   public void alarm() { System.out.println( "lights up" ); }
}

class Gates implements AlarmListener {
   public void alarm() { System.out.println( "gates close" ); }
}

class CheckList {
   public void byTheNumbers() {  // Template Method design pattern
      localize();
      isolate();
      identify(); }
   protected void localize() {
      System.out.println( "   establish a perimeter" ); }
   protected void isolate()  {
      System.out.println( "   isolate the grid" ); }
   protected void identify() {
      System.out.println( "   identify the source" ); }
}
                   // class inheri.  // type inheritance
class Surveillance extends CheckList implements AlarmListener {
   public void alarm() {
      System.out.println( "Surveillance - by the numbers:" );
      byTheNumbers(); }
   protected void isolate() { System.out.println( "   train the cameras" ); }
}

public class ClassVersusInterface {
   public static void main( String[] args ) {
      SensorSystem ss = new SensorSystem();
      ss.register( new Gates()        );
      ss.register( new Lighting()     );
      ss.register( new Surveillance() );
      ss.soundTheAlarm();
}  }
Mungkin kira-kira sampai segini dulu coba2 kita. sampai ketemu di coba2yang lainnya