Tutorial Design Pattern : Penerapan Design Pattern Factory Method di PHP

Akhirnya sampai rumah juga sebelum hujan melanda, setelah dari tadi jam 2 siang menemani anak-anak SMA yang mengikuti pelatihan desain grafis di kampus. Lumayanlah, bisa cuci mata liat cewek-cewek SMA yang masih segar-segar seperti ikan yang baru ditangkap dari laut. Yupppzzz, cukup cuci mata aja, gak pengen lebih kok ;). Nah,,, di postingan kedua hari ini saya akan membahas tentang design pattern lagi, yaitu design pattern Factory Method (hasil semedi di lab kampus). Seperti namanya, design pattern Factory Method berfungsi untuk memproduksi atau menghasilkan suatu output yang sama entah itu sumbernya dari manapun atau apapun. Contoh penggunaannya (dari kacamata saya :)) pada sebuah framework, ialah pada penanganan berbagai database yang berbeda-beda. Dimana polanya ialah, daftarkan jenis database -> buat koneksi -> buat query. Untuk mengurangi pengulangan pola tersebut, maka digunakanlah design pattern Factory Method sebagai solusinya, demi mengantisipasi perubahan tanpa harus mengulangi pola yang sama untuk setiap jenis database yang berbeda. Bagi yang masih bingung, saya akan coba untuk menjelaskan cara penggunaanya. Kalau ada yang salah, mohon koreksinya yaw :D.

Sama seperti design pattern observer, kita membutuhkan 2 buah interface. Interface yang pertama sebagai creator (dalam hal ini sebagai bagian yang buat koneksi) dan interface yang kedua sebagai pengenal dari database yang didaftarkan. Selanjutnya kedua interface tersebut diimplementasikan oleh class-class yang berikutnya.

interface_factory.php

<?php
interface DB_Koneksi
{
  public function buat_koneksi($db);
}
interface DB_Name
{
  public function nama_database();
}
?>

Setelah itu kita buat sebuah class yang mengimplementasikan interface DB_Koneksi. Memanfaatkan function buat_koneksi() yang di dalamnya koneksi dipilih sesuai dengan database yang telah ditentukan. Kemudian memanggil salah satu class yang sesuai dengan pilihan databasenya.

Pilih_Koneksi.php

<?php
include('interface_factory.php');
include('DB_Oracle.php');
include('DB_Mysql.php');

class Pilih_Koneksi implements DB_Koneksi
{
  public function buat_koneksi($param)
  {
    if($param == "oracle")
    {
      return new DB_Oracle();
    }
    else if($param == "mysql")
    {
       return new DB_Mysql();
    }
  }
}
?>

Yang terakhir, kita buat 2 buah class yang mengimplementasikan interface DB_Name. Dengan memanfaatkan function database_name(), dihasilkan output sesuai dengan database yang terpilih.

DB_Oracle.php

<?php
class DB_Oracle implements DB_Name
{
    public function nama_database()
    {
      return "Anda Memakai Database Oracle";
    }
}
?>

DB_Mysql.php

<?php
class DB_Mysql implements DB_Name
{
    public function nama_database()
    {
      return "Anda Memakai Database MySQL";
    }
}
?>

Cara penggunaanya seperti di bawah ini :

factory.php

<?php
include('Pilih_Koneksi.php');

$koneksi = new Pilih_Koneksi();
$pilih_koneksi = $koneksi->buat_koneksi("mysql");
echo $pilih_koneksi->nama_database();
?>

“Nah, simpel kan…???”. Design pattern Factory Method ini bermanfaat untuk membuat sebuah objek, tetapi kita tidak tahu tipe objek apa yang akan dibuat. Contohnya seperti di atas, kita buat sebuah objek koneksi tetapi kita tidak perlu tahu tipe objek database apa yang dipakai. OK deh, sekian dulu postingan saya malam ini, mau lanjut belajar design pattern yang lainnya dulu. Semoga bermanfaat untuk rekan-rekan yang juga sedang belajar design pattern.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

4 comments

  1. Doni Mawardi Alfiki Reply

    Terima Kasih buat informasi dari blognya….

    membuat inspirasi buat saya agar bisa lebih baik lagi….

  2. bungali Reply

    boleh nih semedi lagi buat nambah penjelasan tentang factory pattern untuk object oriented.. yang contohnya pake toko pizza gitu .. 😀

  3. Arrizal Amin Reply

    Itu harus pake interface ya? kalau gak pake interface gimana?