Sesuai dengan namanya, Chain of Responsibility memiliki konsep kerja seperti rantai yang terikat. Yaitu sebuah proses yang saling menyambung antara receiver dengan receiver berikutnya. Pattern ini termasuk ke dalam Behavior Pattern.
Dalam prosesnya, jika sebuah proses dalam receiver berhasil ataupun gagal, maka tetap akan dilanjutkan ke receiver berikutnya. Proses ini berlangsung sebanyak jumlah receiver itu sendiri. Bisa kita contohkan seperti cara kerja pengiriman paket lewat pos, dimana paket tersebut di kirim ke tingkat Provinsi terlebih dahulu, setelah provinsi lalu di proses ke tingkat kabupaten, kecamatan, desa/kelurahan kemudian yang terakhir di kirim kepada si penerima. Proses tersebut tersusun dan tidak acak, tidak contohnya dari provinsi lalu ke desa lalu ke kecamatan, tidak seperti itu. Nah, dalam Pattern ini Provinsi, kabupaten ataupun kecamatan merupakan sebuah receiver yang saling terhubung secara seri. Kemudian paket merupakan sebuah data atau objek yang akan di proses oleh receiver-receiver tersebut.
Untuk itu ada baiknya kita lihat terlebih dahulu contoh penerapan java Chain of Responsibility berikut ini. Tapi sebelumnya untuk pengguna mobile mohon aktifkan javaScript dan matikan fitur GoogleWebLight untuk melihat kode berikut secara keseluruhan.
1. Buat class Currency.java
package main; public class Currency { public int amount; public Currency(int amount){ this.amount = amount; } public int getAmount(){ return amount; }
}
2. Buat interface DispenseChain.java
package main; public interface DispenseChain { void setNextChain(DispenseChain nextChain); void dispense(Currency currency); }
3. Buat class Dibagi10Persen.java implements ke DispenseChain.java
package main; public class Dibagi10Persen implements DispenseChain{ private DispenseChain chain; @Override public void setNextChain(DispenseChain nextChain) { this.chain = nextChain; } @Override public void dispense(Currency currency) { if(currency.getAmount() >= 10 ){ int number = currency.getAmount() / 10; int remainder = currency.getAmount() % 10; System.out.println(currency.getAmount()+" Bisa dibagi 10 sebanyak "+number+" kali, sisa bagi = "+remainder); if(remainder >= 10){ this.chain.dispense(new Currency(remainder)); } }else{ chain.dispense(currency); } } }
4. Buat class Dibagi20Persen.java implements ke DispenseChain.java
package main; public class Dibagi20Persen implements DispenseChain{ private DispenseChain dispenseChain; @Override public void setNextChain(DispenseChain nextChain) { this.dispenseChain = nextChain; } @Override public void dispense(Currency currency) { if(currency.getAmount() >= 20 ){ int number = currency.getAmount() / 20; int remainder = currency.getAmount() % 20; System.out.println(currency.getAmount()+" Bisa dibagi 20 sebanyak "+number+" kali, sisa bagi = "+ remainder); if(remainder >= 10){ this.dispenseChain.dispense(new Currency(remainder)); } }else{ dispenseChain.dispense(currency); } } }
5. Buat class Dibagi30Persen.java implements ke DispenseChain.java
package main; public class Dibagi30Persen implements DispenseChain { private DispenseChain dispenseChain; @Override public void setNextChain(DispenseChain nextChain) { this.dispenseChain = nextChain; } @Override public void dispense(Currency currency) { if(currency.getAmount() >= 30 ){ int number = currency.getAmount() / 30; int remainder = currency.getAmount() % 30; System.out.println(currency.getAmount()+" Bisa dibagi 30 sebanyak "+number+" kali, sisa bagi = "+ remainder); if(remainder >= 10){ this.dispenseChain.dispense(new Currency(remainder)); } }else{ dispenseChain.dispense(currency); } } }
6. Buat class Test.java
package main; public class Test { private DispenseChain dc1, dc2, dc3; public Test(){ dc1 = new Dibagi30Persen(); dc2 = new Dibagi20Persen(); dc3 = new Dibagi10Persen(); // Set The Chain Of Responsibility dc1.setNextChain(dc3); dc2.setNextChain(dc3); } public static void main (String[] args){ Test test = new Test(); int amount = 71; System.out.println("Amount : "+amount); test.dc1.dispense(new Currency(amount)); System.out.println(); int amount2 = 80; System.out.println("Amount : "+amount2); test.dc1.dispense(new Currency(amount2)); System.out.println(); int amount3 = 100; System.out.println("Amount : "+amount3); test.dc1.dispense(new Currency(amount3)); } }
7. Verifikasi Output :
Amount : 71 71 Bisa dibagi 30 sebanyak 2 kali, sisa bagi = 11 11 Bisa dibagi 10 sebanyak 1 kali, sisa bagi = 1 Amount : 80 80 Bisa dibagi 30 sebanyak 2 kali, sisa bagi = 20 20 Bisa dibagi 10 sebanyak 2 kali, sisa bagi = 0 Amount : 100 100 Bisa dibagi 30 sebanyak 3 kali, sisa bagi = 10 10 Bisa dibagi 10 sebanyak 1 kali, sisa bagi = 0
Nah, pada program diatas kita akan mencoba membagi amount ke tiga receiver. Receiver pertama adalah receiver pembagi 30, receriver kedua pembagi 20, dan receiver ke tga pembagi 10. Pertama amount akan dicoba dibagi 30 terlebih dahulu, jika bisa maka amount akan dibagi 30 dan hasil baginya akan lanjut dibagi ke receiver kedua yaitu amount akan dicoba dibagi 20 setelah itu lalu dibagi kembali 10. Namun ada titik dimana proses tersebut akan berhenti dimana ketika Amount tidak memungkinkan untuk di proses ke receiver berikutnya.
Dan pastinya setiap receiver berisi referensi dari receiver sebelumnya, itu berarti jika salah satu receiver tidak dapat menanggapi permintaan maka proses ini akan dilanjutkan terus berlanjut ke receiver berikutnya.
Demikian penjelasan dan contoh mengenai Java Chain Of Responsibility Pattern. Untuk kamu yang ingin mendownload Contoh Sample Program tersebut, bisa di download disini. Dan Kamu juga mungkin ingin membaca artikel kami sebelumnya mengenai Java Proxy Pattern atau membaca artikel kami berikutnya mengenai Java Command Pattern Terimakasih.
Sumber :
www.jurnaldev.com
www.tutorialpont.com
www.wikipedia.com
www.java2blog.com
No comments:
Post a Comment