Design Pattern : Observer

Posted on Updated on

Observer Pattern merupakan salah satu teknik yang digunakan dalam Design Pattern. Berbeda dengan Strategy Pattern yang saya jelaskan di postingan sebelumnya, Observer Pattern ini digunakan dalam kondisi MVC di mana sebuah model dapat ditampilkan secara paralel di lebih dari 1 view. Kondisi ini diilustrasikan dengan diagram berikut.

MVC Relationship
MVC Relationship

Dilihat dari ilustrasi di atas, sebuah View yang menerima data dari Model juga dapat memberikan request perubahan data untuk diteruskan ke Model, dan kemudian View yang lain menerima respon dengan mengubah data tersebut. Ini seringkali terjadi pada sebuah software multiplatform yang memiliki banyak chart untuk menampilkan data dan saling synchronize. Penggunaan Observer Pattern dapat diaplikasikan dalam kondisi berikut (mengutip dari buku Erich Gamma) :

  • When an abstraction has two aspects, one dependent on the other. Encapsulating these aspects in separate objects lets you vary and reuse them independently.
  • When a chane to one object requires changing others, and you don’t know how many objects need to be changed.
  • When an object should be able to nofity other objects without making assumptions about who these objects are. In other words, you don’t want these objects tightly coupled.

Untuk mengaplikasikan Observer pattern ini, dapat digunakan class diagram dengan struktur sebagai berikut.

Observer Pattern Class Diagram
Observer Pattern Class Diagram

Dari struktur di atas, dapat dilihat ada 4 bagian yang saling berkait, yaitu Class Abstrak Subject, Class Abstrak Observer, Class ConcreteSubject, dan Class ConcreteObserver. Saya akan membahas peran masing-masing class di Observer Pattern ini

Subject

Class Subject bertugas untuk mengkoneksikan Class Observer mana saja yang akan mengkonsumsi data dari Subject. Setidaknya ada 2 peran penting dari Class Subject, yaitu :

  • Know its observers. Any number of Observer objects may observer a subject.
  • Provides an interface for attaching and detaching Observer objects.

Observer

Class Observer merupakan  representasi dari View. Class ini bersifat abstrak sehingga perlu diturunkan agar method-method yang ada dapat direalisasikan. Peran dari class Observer yaitu :

  • Defines an updating interface for objects that should be notified of changes in a subject.

ConcreteSubject

Class ConcreteSubject merupakan instance(turunan) dari class abstrak Subject. Class ini menyimpan state dari data yang akan ditampilkan, data ini didapatkan dari database atau sumber lain. Peran dari ConcreteSubject ini yaitu :

  • Stores state of interest to ConcreteObserver objects.
  • Sends a notification to its observers when its state changes.

ConcreteObserver

Class ConcreteObserver merupakan class yang akan memanggil state dari ConcreteSubject. Class inilah yang merupakan representasi dari View, yang dapat berupa spreadsheet ataupun chart. Ada 3 peran dari class ini, yaitu :

  • Maintains a reference to a ConcreteObserver objects.
  • Stores state that should stay consistent with subject’s.
  • Implements the Observer updating interface to keep its state consistent with the subject’s.

Dengan Observer pattern, masing-masing observer yang merupakan representasi View dapat melakukan perubahan ke dalam state dari Subject. ConcreteSubject akan menerima notifikasi perubahan untuk kemudian mengirimkan request perubahan ke semua Observer (View) yang sudah di-Attach sebelumnya. Ilustrasi Sequence Diagram tahap-tahap ini dapat dilihat pada ilustrasi berikut.

Sequence Diagram Observer Pattern
Sequence Diagram Observer Pattern

Dengan Observer Pattern, struktur dari Subject (Model) dan Observer (View) dapat berdiri sendiri tanpa ketergantungan satu dengan yang lainnya. Bila terjadi perubahan pada sisi Subject (Model), kita tidak harus mengubah struktur Observer maupun sebaliknya. Ada banyak keuntungan yang bisa didapatkan dengan Observer Pattern ini, antara lain :

  1. Abstract coupling between Subject and Observer. Kolaborasi antara Subject dan Observer dijaga dengan hati-hati. Subject memiliki list dari observer yang terkoneksi, dengan tujuan dapat langsung memberikan respon apabila terjadi perubahan data. Berdasarkan class diagram di atas, Subject hanya memegang tipe dari Class abstrak Observer tanpa harus bentuk concrete dari observer. Ini menjadikan Observer dapat melakukan eksekusi secara fleksibel tergantung dari ConcreteObserver masing-masing.
  2. Support for broadcast communication. Setelah menerima notifikasi bahwa data berubah, Subject akan mengirimkan perubahan secara broadcast ke seluru Observer yang terdaftar.  Subject tidak peduli berapa banyak Observer yang terdaftar, sehingga ini memungkinkan Subject bebas untuk menambah atau menghapus observer yang dikehendaki.
  3. Unexpected updates. Dengan view yang selalu terkoneksi pada Subject (model), terkadang kita dapat menerima perubahan data yang tidak diharapkan. Ini dapat terjadi dikarenakan telah terjadi perubahan data di View yang lain. Kasus ini dapat diatasi dengan memberikan notifikasi tambahan data/state mana saja yang telah berubah.

ObserverPattern Sample

Salah satu penerapan sederhana adalah pada kasus interaksi TextBox dan Slider pada sebuah form yang saling terkoneksi sehingga memiliki data yang sama. Jika dengan cara biasa (tidak menggunakan Design Pattern), programmer membutuhkan algoritma lebih yang digunakan untuk menghubungkan antara TextBox value dan Slide value. Ini baru dengan 2 control, sekarang bagaimana jika ada lebih dari 10 control, mulai rumit bukan?? Di sinilah mulai terlihat peran dari Observer Pattern 🙂

Contoh Class Diagram pada Observer Pattern
Contoh Class Diagram pada Observer Pattern

File contoh penerapan dari Observer Pattern dapat didownload di https://copy.com/te9divVvtejp. Semoga bermanfaat 🙂

Iklan

6 thoughts on “Design Pattern : Observer

    Design Pattern : Decorator « Rekaman Jejak-Jejak said:
    5 Oktober 2013 pukul 04:27

    […] wawasan tentang Decorator Pattern. Artikel ini merupakan artikel ke-3 setelah artikel pertama dan kedua membahas tentang Strategy Pattern dan Observer Pattern. Jika kedua pattern awal merupakan jenis […]

    […] Sumber : https://fadlikadn.wordpress.com/2013/09/28/design-pattern-observer/ […]

    wirasatria90 said:
    30 Maret 2014 pukul 16:19
      Fadlika Dita Nurjanto responded:
      31 Maret 2014 pukul 19:34

      Terima kasih sudah sempat berkunjung 🙂

        wirasatria90 said:
        31 Maret 2014 pukul 21:31

        iya nih lagi ada tugas resume design pattern pas banget mas

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s