Apa itu Observer Pattern
Observer Pattern adalah pola desain perangkat lunak di mana ada suatu object(disebut sebagai Observable) secara otomatis memberi notifikasi kepada semua object yang memiliki dependency(disebut Observer) setiap ada perubahan data pada Observable.

Sedangkan di Android, Observable pattern sudah di handle oleh kelas bawaan Java yg sangat keren pada kelas java.util.Observable. Sehingga untuk dapat menggunakan fitur-fitur Observable dapat dilakukan dengan cara mengimport kelas java.util.Observable.
1 |
import java.util.Observable; |
Contoh kasus
Untuk memudahkan dalam memahami Observer Pattern di Android, dapat dilihat pada skenario berikut ini:
1. ActivityMain, Activity 2 dan Activity 3 adalah sama-sama Observer. ActivityMain dapat memanggil Activity 2 dan Activity 3.
2. Berikutnya adalah simulasi update value pada Observable yaitu berupa jumlah notifikasi.
3. Observable akan memberi notifikasi kepada semua Observer secara otomatis setiap ada perubahan data.
Object-object yg dibutuhkan antara lain:
- Observable object
Bertindak sebagai object Observable adalah kelas Notif.java
1234567891011121314151617181920212223242526272829303132333435package com.research.hangga.myresearch.Objects;import android.util.Log;import java.util.Observable;/*** Copyright (C) PT. Sebangsa Bersama - All Rights Reserved* Unauthorized copying of this file, via any medium is strictly prohibited* Proprietary and confidential* Originally written by Hangga Aji Sayekti, 16/12/15*/public class Notif extends Observable {private int count;public int getCount() {return count;}public int update(){this.count++;setChanged();notifyObservers();return this.count;}public void setCount(int count) {Log.d("SB", String.valueOf(this.count));this.count = count;setChanged();notifyObservers();}} - Observers object dalam hal ini adalah ActivityMain, ActivitySecond dan ActivityThird sehingga ketiganya harus mengimplements Observer.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091package com.research.hangga.myresearch;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import com.research.hangga.myresearch.Objects.BaseApplication;import java.util.Observable;import java.util.Observer;public class MainActivity extends AppCompatActivity implements Observer {@Overridepublic void update(Observable observable, Object data) {notifView.setCount(baseApplication.getNotif().getCount());}private BaseApplication baseApplication;private NotifView notifView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);toolbar.setTitle(R.string.activity_main);toolbar.setNavigationIcon(R.mipmap.reindeer_icon);setSupportActionBar(toolbar);baseApplication = (BaseApplication) getApplication();baseApplication.getNotif().addObserver(this);notifView = new NotifView(MainActivity.this);Button btnUpdate = (Button) findViewById(R.id.btnUpdate);btnUpdate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {baseApplication.getNotif().update();}});Button btnSecond = (Button) findViewById(R.id.btnSecond);btnSecond.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this,SecondActivity.class));}});Button btnThird = (Button) findViewById(R.id.btnThird);btnThird.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this,ThirdActivity.class));}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);MenuItem itemNotif = menu.findItem(R.id.action_notif);itemNotif.setActionView(notifView);notifView.setCount(baseApplication.getNotif().getCount());return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_notif) {return true;}return super.onOptionsItemSelected(item);}}