`

`
Powered by Blogger.

penerapan design pattern mediator



               Design pattern mediator ini berfungsi untuk mengatur bagaimana satu set objek dapat berinteraksi/berkomunikasi. Biasanya di dalam sebuah aplikasi terdiri dari sejumlah class, dimana logikas aplikasi dan komputasi dijalankan di dalam class-class tersebut. Karena ruang lingkupnya adalah aplikasi, maka class-class tersebut akan saling berinteraksi. Dan ketika ada pengembangan/perawatan, maka proses interaksi antar class akan semakin kompleks. Bahkan mungkin kode-kode aplikasi akan menjadi lebih sulit dibaca dan dipahami (terutama untuk yang programmer yang statusnya beginner). 

               Selain itu aplikasi akan lebih sulit untuk diubah, karena tiap perubahan yang dilakukan pada suatu class dapat mempengaruhi kinerja class yang lainnya. Maka dari itu digunakan pattern mediator sebagai perantara antar objek untuk saling berinteraksi. Dalam hal ini saya contohkan seperti sebuah pekerjaan untuk membuat aplikasi, dimana ada desainner interface dan programmer aplikasi. Mereka berdua tidak diperbolehkan berkomunikasi secara langsung, tapi berkomunikasi melalui job mediator dalam hal ini, project manager. 
 
                   Contoh yang lainnya ialah pada proses komunikasi antara pesawat dengan pesawat yang lainnya, dimana pesawat tidak langsung berkomunikasi, melainkan melalui sebuah perantara yaitu menara perantara yang ada di bandara. Sekarang kita coba untuk mengimplementasikannya ke dalam sebuah script PHP, seperti di bawah ini :




<?php

class JobMediator {
private $design_obj;
private $programming_obj;
function __construct($design_in, $programming_in) {
$this->design_obj = new JobDesign($design_in,$this);
$this->programming_obj = new JobProgramming($programming_in,$this);
}
function ambil_design() {return $this->design_obj;}
function ambil_programming() {return $this->programming_obj;}
function ubah(Job $ubah_pekerjaan) {
if ($ubah_pekerjaan instanceof JobDesign) {
if ($ubah_pekerjaan->ambil_status() == 'awal') {
if ($this->ambil_programming()->ambil_status() != 'awal') {
$this->ambil_programming()->set_programming_awal();
}
}
elseif ($ubah_pekerjaan->ambil_status() == 'akhir') {
if ($this->ambil_programming()->ambil_status() != 'akhir') {
$this->ambil_programming()->set_programming_akhir();
}
}
}
elseif ($ubah_pekerjaan instanceof JobProgramming) {
if ($ubah_pekerjaan->ambil_status() == 'awal') {
if ($this->ambil_design()->ambil_status() != 'awal') {
$this->ambil_design()->set_design_awal();
}
} elseif ($ubah_pekerjaan->ambil_status() == 'akhir') {
if ($this->ambil_design()->ambil_status() != 'akhir') {
$this->ambil_design()->set_design_akhir();
}
}
}
}
}

abstract class Job {
private $mediator;
function __construct($mediator_in) {
$this->mediator = $mediator_in;
}
function ambil_mediator() {return $this->mediator;}
function ubah($ubah_pekerjaan) {
ambil_mediator()->ubah($ubah_pekerjaan);
}
}


class JobDesign extends Job {
private $design;
private $status;
function __construct($design_in, $mediator_in) {
$this->design = $design_in;
parent::__construct($mediator_in);
}
function ambil_design() {return $this->design;}
function set_design($design_in) {$this->design = $design_in;}
function ambil_status() {return $this->status;}
function set_status($status_in) {$this->status = $status_in;}
function set_design_awal() {
$this->set_design('+++'.strtoupper($this->ambil_design()).'+++');
$this->set_status('awal');
$this->ambil_mediator()->ubah($this);
}
function set_design_akhir() {
$this->set_design('---'.strtolower($this->ambil_design()).'---');
$this->set_status('akhir');
$this->ambil_mediator()->ubah($this);
}
}



class JobProgramming extends Job {
private $programming;
private $status;
function __construct($programming_in, $mediator_in) {
$this->programming = $programming_in;
parent::__construct($mediator_in);
}
function ambil_programming() {return $this->programming;}
function set_programming($programming_in) {$this->programming = $programming_in;}
function ambil_status() {return $this->status;}
function set_status($status_in) {$this->status = $status_in;}
function set_programming_awal() {
$this->set_programming('+++'.strtoupper($this->ambil_programming()).'+++');
$this->set_status('awal');
$this->ambil_mediator()->ubah($this);
}
function set_programming_akhir() {
$this->set_programming('---'.strtolower($this->ambil_programming()).'---');
$this->set_status('akhir');
$this->ambil_mediator()->ubah($this);
}
}



function cetak($isi) {
echo $isi.'<br/>';
}

$mediator = new JobMediator('Desain Layout Website', 'Coding Aplikasi');
$design = $mediator->ambil_design();
$programming = $mediator->ambil_programming();
cetak('awal desain : ' . $design->ambil_design());
cetak('awal programming: ' . $programming->ambil_programming());
cetak('');

$design->set_design_awal();
cetak('Desain Awal');
cetak('Desain: ' . $design->ambil_design());
cetak('Programming: ' . $programming->ambil_programming());
cetak('');



$programming->set_programming_awal();
cetak('Programming Awal');
cetak('Desain: ' . $design->ambil_design());
cetak('Programming: ' . $programming->ambil_programming());
cetak('');

$programming->set_programming_akhir();
cetak('Programming Akhir');
cetak('Desain: ' . $design->ambil_design());
cetak('Programming: ' . $programming->ambil_programming());
cetak('');

$design->set_design_akhir();
cetak('Desain Akhir');
cetak('Desain: ' . $design->ambil_design());
cetak('Programming: ' . $programming->ambil_programming());
cetak('');

?>


Pada script di atas terdapat sebuah class JobMediator yang didalamnya mengatur bagaimana antar objek yang terbentuk dari class saling berkomunikasi dan melakukan perubahan keadaan/perilaku dari objek yang lainnya. pattern mediator ini sangat efisien dari sisi pengembangan/perawatan ketika aplikasi yang sedang kita kembangkan sudah mulai kompleks dan interaksi antar objek/class sudah banyak. Lumayanlah, bisa diterapkan di aplikasi kecil-kecilan terlebih dahulu, siapa tau bisa jadi aplikasi yang besar :




sumber : wikipedia & gede lumbung
Bagikan :
+
Previous
Next Post »
0 Komentar untuk "penerapan design pattern mediator"

 
Template By Kunci Dunia
Back To Top