android, coding,

Observer Pattern in Android

Hangga Aji Sayekti Hangga Aji Sayekti Follow Dec 17, 2015 · 2 mins read
Observer Pattern in Android
Share this

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.

![https://en.wikipedia.org/wiki/Observer_pattern#Structure](http://hangga.github.io/blog/wp-content/uploads/2015/12/500px-Observer.svg_.png)
https://en.wikipedia.org/wiki/Observer\_pattern#Structure

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.

skenario-1

2. Berikutnya adalah simulasi update value pada Observable yaitu berupa jumlah notifikasi.

skenario-2

3. Observable akan memberi notifikasi kepada semua Observer secara otomatis setiap ada perubahan data.

skenario-3

Object-object yg dibutuhkan antara lain:

  1. 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(); }

    } ```

  2. 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”]

Hangga Aji Sayekti
Written by Hangga Aji Sayekti
A passionate Software Engineer from Indonesia with experience since 2008. Bachelor's degree in Mathematics and loves Science and Computers.