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.
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** ``` package 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. ``` package 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 { @Override public void update(Observable observable, Object data) { notifView.setCount(baseApplication.getNotif().getCount()); }
private BaseApplication baseApplication; private NotifView notifView; @Override protected 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() { @Override public void onClick(View v) { baseApplication.getNotif().update(); } }); Button btnSecond = (Button) findViewById(R.id.btnSecond); btnSecond.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); Button btnThird = (Button) findViewById(R.id.btnThird); btnThird.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, ThirdActivity.class)); } }); } @Override public 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; } @Override public 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 SimplifiableIfStatement if (id == R.id.action_notif) { return true; } return super.onOptionsItemSelected(item); } } ```
[dl url=âhttp://hangga.github.io/blog/wp-content/uploads/2015/12/ObservablePattern.7zâ title=âDownload Source Lengkapâ desc=âby : Hangga Aji Sayektiâ]