Thursday 4 April 2013

Pattern Abstract Factory di Java, C#, PHP

Abstract factory pattern tidak jauh - jauh berbeda dengan Factory Pattern, dan Abstract factory pattern ini juga termasuk kategori design pattern creational, kali ini ane akan coba sedikit membahas dan mengimplementasikannya dengan Java, C# dan PHP... Abtract factory, pattern ini dapat mendefinisikan persetiap factory method nya menjadi operator baru. pattern Abstract factory ini menyediakan sebuah interface untuk menciptakan object yang terkait tanpa perlu menyatakan Class implementasi dari interface ini :D . Sebagai contoh pada pada postingan ini yang nanti akan ane implementasikan di Java, C#, dan PHP...
Di kampus ane Tehnik informatika masi dibagi lagi menjadi 3 bagian, yaitu AI/Citra, RPL dan Jaringan ... tentunya pada 3 bagian minat itu ada mata kuliah2 tertentu juga, misal pada RPL, mata kuliah nya ADBO dan 3tier, kalo AI/Citra matakuliah nya Expret System dan Mechine Learning.. apa hubungannya dengan pattern Abstract factory ? :D hehehee begini gan.. seperti yang ane bilang diatas pattern ini bisa menciptakan object yang terkait.. kan gitu ya ?  minat RPL matakuliah yang terkait itu ADBO dan 3tier, minat AI matakuliah yang terkait itu Expret System dan Mechine Learning.. mulai paham kan ? untuk pihak akademik untuk menciptakan minat baru hanya perlu menyediakan nama jurusan (minat) dan mata kuliah nya saja, dan untuk pihak mahasiswa untuk memilih mata kuliah menurut minatnya, hanya cukup menentukan minat dan dan nama mata kuliah nya itu... biar lebih paham, sekarang ane kasi penerapan pattern abstract factory ini di Java, C# dan PHP

Java
package AbstractFactory;

public class MainClass {
 public static void main(String[] args) {
  Pilihan pilih = new Pilihan();
  Jurusan jurusan = pilih.PilihJurusan("RPL");
  MataKuliah matkul = jurusan.Matkul("ADBO");
  matkul.Print();
  
  System.out.println("------------------");
  jurusan = pilih.PilihJurusan("AI");
  matkul = jurusan.Matkul("Expret System");
  matkul.Print();
 }
}

interface MataKuliah{
 public void Print();
}

class ABDO implements MataKuliah{
 @Override
 public void Print() {
  System.out.println("Ini mata Kuliah ADBO (Rumpun RPL)");
 }
}

class ThreeTier implements MataKuliah{
 @Override
 public void Print() {
  System.out.println("Ini mata Kuliah 3 Tier (Rumpun RPL)");
 }
}

class ExpretSystem implements MataKuliah{
 @Override
 public void Print() {
  System.out.println("Ini mata Kuliah Expret System (Rumpun AI)");
 }
}

class MechineLearning implements MataKuliah{
 @Override
 public void Print() {
  System.out.println("Ini mata Kuliah Mechine Learning (Rumpun AI)");
 }
}

interface Jurusan{
 public MataKuliah Matkul(String matakuliah);
}

class RPL implements Jurusan{
 @Override
 public MataKuliah Matkul(String matakuliah) {
  if(matakuliah.equals("ADBO")){
   return new ABDO();
  }else{
   return new ThreeTier();
  }  
 }
}

class AI implements Jurusan{
 @Override
 public MataKuliah Matkul(String matakuliah) {
  if(matakuliah.equals("Mechine Learning")){
   return new MechineLearning();
  }else{
   return new ExpretSystem();
  }
 }
}

class Pilihan{
 public Jurusan PilihJurusan(String jurusan){
  if(jurusan.equals("RPL")){
   return new RPL();
  }else{
   return new AI();
  }
 }
}  

C#
using System;

namespace AbstractFactory
{
 class Program
 {
  public static void Main(string[] args)
  {
   Pilihan pilih = new Pilihan();
   Jurusan jurusan = pilih.PilihJurusan("RPL");
   MataKuliah matkul = jurusan.Matkul("ADBO");
   matkul.Print();
   
   Console.WriteLine("------------------");
   jurusan = pilih.PilihJurusan("AI");
   matkul = jurusan.Matkul("Expret System");
   matkul.Print();
   
   Console.ReadKey(true);
  }
 }
 
 interface MataKuliah{
  void Print();
 }
 
 class ABDO : MataKuliah{
  public void Print() {
   Console.WriteLine("Ini mata Kuliah ADBO (Rumpun RPL)");
  }
 }
 
 class ThreeTier : MataKuliah{  
  public void Print() {
   Console.WriteLine("Ini mata Kuliah 3 Tier (Rumpun RPL)");
  }
 }
 
 class ExpretSystem : MataKuliah{  
  public void Print() {
   Console.WriteLine("Ini mata Kuliah Expret System (Rumpun AI)");
  }
 }
 
 class MechineLearning : MataKuliah{  
  public void Print() {
   Console.WriteLine("Ini mata Kuliah Mechine Learning (Rumpun AI)");
  }
 }
 
 interface Jurusan{
  MataKuliah Matkul(String matakuliah);
 }
 
 class RPL : Jurusan{  
  public MataKuliah Matkul(String matakuliah) {
   if(matakuliah == "ADBO"){
    return new ABDO();
   }else{
    return new ThreeTier();
   }  
  }
 }
 
 class AI : Jurusan{  
  public MataKuliah Matkul(String matakuliah) {
   if(matakuliah == "Mechine Learning"){
    return new MechineLearning();
   }else{
    return new ExpretSystem();
   }
  }
 }
 
 class Pilihan{
  public Jurusan PilihJurusan(String jurusan){
   if(jurusan == "RPL"){
    return new RPL();
   }else{
    return new AI();
   }
  }
 }
}  


PHP
<?php
 interface MataKuliah{
  function _Print();
 }

 class ABDO implements MataKuliah{  
  function _Print() {
   echo("Ini mata Kuliah ADBO (Rumpun RPL)< br />");
  }
 }

 class ThreeTier implements MataKuliah{  
  function _Print() {
   echo("Ini mata Kuliah 3 Tier (Rumpun RPL)< br />");
  }
 }

 class ExpretSystem implements MataKuliah{  
  function _Print() {
   echo("Ini mata Kuliah Expret System (Rumpun AI)< br />");
  }
 }

 class MechineLearning implements MataKuliah{  
  function _Print() {
   echo("Ini mata Kuliah Mechine Learning (Rumpun AI)< br />");
  }
 }

 interface Jurusan{
  function Matkul($matakuliah);
 }

 class RPL implements Jurusan{  
  function Matkul($matakuliah) {
   if($matakuliah == "ADBO"){
    return new ABDO();
   }else{
    return new ThreeTier();
   }  
  }
 }

 class AI implements Jurusan{  
  function Matkul($matakuliah) {
   if($matakuliah == "Mechine Learning"){
    return new MechineLearning();
   }else{
    return new ExpretSystem();
   }
  }
 }

 class Pilihan{
  function PilihJurusan($jurusan){
   if($jurusan == "RPL"){
    return new RPL();
   }else{
    return new AI();
   }
  }
 }
 
 $pilih = new Pilihan();
 $jurusan = $pilih->PilihJurusan("RPL");
 $matkul = $jurusan->Matkul("ADBO");
 $matkul->_Print();
  
 echo("-------------------------<br />");
 $jurusan = $pilih->PilihJurusan("AI");
 $matkul = $jurusan->Matkul("Expret System");
 $matkul->_Print();
?>  
untuk memahaminya secara mudah langsung saja kita ke main program (program utama), kalo ente lihat disitu ane membuat instance object dari class Pilih, kemudian ane memanggil function pilih jurusan kemudian pada parameter nya ane kasi komentar yaitu "RPL" dan return value dari function ini ane tampung di sebuah variabel bertipe Jurusan (Interface) bernama jurusan, kemudian variabel ini mengakses function Matkul dan parameternya ane kasi komentar "ADBO" dan return value ini ane tampung pada sebuah variabel bertipe Matakuliah (Interface) bernama matkul, kemudian variabel ini mengakses function Print...
Artinya begini saat object instance class pilih mengakses function pilihjurusan,function ini mengembalikan object instance dari class RPL kemudian waktu variabel jurusan mengakses function matkul, function ini mengembalikan object instance dari class ADBO, dengan begitu dari pilih jurusan dan penentuan mata kuliah saling berkaitan :D dan object instance nya yang diberikan dari return value nya juga berkaitan, inilah konsep kerja pattern abstract factory ... paham ya ? kalo udah paham sekian dulu untuk postingan kali ini tentang design pattern Abstract factory dan implementasinya di Java, C# dan PHP, semoga bermanfaat :)

No comments:

Post a Comment