Senin, 28 November 2016

Bridge pattern

Apa itu design pattern?

Design Pattern adalah sebuah solusi untuk menyelesaikan masalah umum yang sering di temui dan dihadapi, yang membentuk sebuah pola (pattern) tertentu dalam membuat sebuah program.

Ada beberapa macam design pattern yaitu
1. Creational Design Pattern
2. Structural Design Pattern
3. Behavioral Design Pattern

Di dalam macam2 design tersebut masih terbagi beberapa metode. 
Dalam blog ini saya akan membahas tentang structural design patern.

  Di dalam structural sendiri masih terbagi menjadi 10 bagian. Namun saya akan membahas tentang Bridge pattern.

Apa itu bridge pattern??
Sesuai namanya langkah ini adalah menjembatani 2 class atau method, dimana semuanya berdiri sendiri. Banyak abstraksi yang ada terkadang membuat kita untuk menjadikan satu, tapi bukan berarti 2 method dijadikan 1, namun bagaimana 2 method tersebut saling bekerja sama dan akan saling memanggil jika dibutuhkan.

Mengapa tidak dijadikan satu method?
Banyak kasus dalam program jika semua method dijadikan satu maka langkah ini sering menjadikan masalah, contoh paling simple di kehidupan sehari hari adalah switch pada kipas angin, jika kalian perhatikan switchnya dia terdapat sebagai on/off. nah jika on maka kipas akan menjalankan method sendiri, jika off maka kipas tersebut melakukan method sendiri. Disinilah terlihat dimana jika dipaksakan menjadi satu maka akan terjadi permasalahan. Mengapa?
Jika diperhatikan kipas angin pada on memiliki sub method sehingga jika off ikut masuk dalam class tersebuut maka akan memperumit. Yang dimaksud sub method adalah kipas memungkinkan untuk menyalakan baling2,lampu,dan swing bersamaan. Disinilah peran bridge dimana ketika beberapa method bersamaan maka akan dipilah2 mana yang akan digunaakan mana yang tidak.

Inti dari bridge sndiri adalah dimana terdapat 2 class independen atau berdiri sendiri kmudian dihubungkan .

Berikut ini adalah contoh pengimplementasian bridge sederhana pada sistem Ktp dan ktm, dimana fungsi ini sama2 menjadi class independen namun dipanggil bersama dalam satu UI.
 

Dalam diagram diatas dijelaskan bahwa sebenarnya KTp dan ktm memiliki method/Class independen namun akan dipanggil bersamaan menggunakan run control. 
Untuk lebih jelasnya mari kita perhatikan code.php dibawah ini. 


<?php

interface Biodata{
function DisplayText();
}

abstract class Controler{
protected $biodata;
function SetBiodata($biodata){
$this->biodata = $biodata;
}
function DisplayText(){
$this->biodata->DisplayText();
}
}

class RunController extends Controler{}

class KTP implements Biodata{
function __construct($name,$alamat,$status_hubungan) {
$this->name = $name;
$this->alamat = $alamat;
$this->status_hubungan = $status_hubungan;
}

private $name,$alamat,$status_hubungan;


function DisplayText() {
echo("<b>Class KTP implementasi dari interface Biodata</b>< br />< br />");
echo("Nama \t: ".$this->name.'< br />');
echo("Alamat \t: ".$this->alamat.'< br />');
echo("Status \t: ".$this->status_hubungan.'< br />');
}
}

class KTM implements Biodata{
function __construct($nim,$nama,$alamat) {
$this->nim = $nim;
$this->nama = $nama;
$this->alamat = $alamat;
}

private $nim,$nama,$alamat;


function DisplayText() {
echo("<b>Class KTM implementasi dari interface Biodata</b><br /><br />");
echo("No-> Induk \t: ".$this->nim.'< br />');
echo("Nama \t\t: ".$this->nama.'< br />');
echo("Alamat \t\t: ".$this->alamat.'< br />');
}
}

$run = new RunController();

$run->SetBiodata(new KTP("irzal as","ndarjo","Jomblo"));
$run->DisplayText();
echo "< br />";
//echo("--------------------------------------------------------< br />");
$run->SetBiodata(new KTM("123", "iirzal", "jangan tanya2"));
$run->DisplayText();
?>


Jika diperhatikan class ktp maupun ktm dipanggil oleh run controler. Nah itulah yang dimaksud dengan bridge(menjembatani) . Hasilnya bagaimana?


 
Gambar disamping menunjukan dimana kedua ktp maupun ktm ditampilkan bersama2 meskitpun terdiri dari dua class yang berbeda.