Wednesday 3 April 2013

Pattern Command di Java, C# dan PHP

Postingan kali ini kembali ane menulis tentang Desain pattern, kali ini giliran pattern command yang ane kasi contoh program nya tentunya masi menggunakan Java, C# dan PHP... ini tulisan ke 5 dihari ini... sebenarnya si ane udah siapin semua contoh program dari pattern - pattern menurut versi gang of four, tapi ya menunggu waktunya aja untuk di upload di blog ini, pengen cepet selesai juga si, sebenarnya ini bukan tuntutan dari pak dosen, pak dosen hanya ngasi tugas rangkuman tiap materi yang dibahas dikelas, istilah jadul nya PR Rangkuman gt :D ...
tapi berhubung ane pengen cepet gak ada tanggungan mangkanya ane sediain 23 pattern  diwaktu yang relativ singkat ini :D Alhamdulillah ane bisa selesaikan semua dan memahaminya... oke, sebelumnya ane kasi penjelasan tentang pattern command ini sebelum ane kasi contoh programya pake Java, C# dan PHP.. pattern command berguna ketika sebuah object digunakan untuk mengakses object lainnya selain itu juga dapat merangkum informasi object yang diakses oleh object ini. bingung ?? :D oke kita langsung ke penulisan program nya yak ?

Java
package Command;

public class MainClass {
 public static void main(String[] args) {
  Sarapan sarapan = new Sarapan();
  CommandSarapan cmd_sarapan = new CommandSarapan(sarapan);
  Controller eksekusi = new Controller(cmd_sarapan);
  eksekusi.Invoke();
  
  System.out.println("-------------------");
  MakanMalam mkn_mlm = new MakanMalam();
  CommandMakanMalam cmd_dinner = new CommandMakanMalam(mkn_mlm);
  eksekusi = new Controller(cmd_dinner);
  eksekusi.Invoke();
 }
}

interface Command{
 public void Execute();
}

class Sarapan{
 public void PrintSarapan(){
  System.out.println("Ini dari class Sarapan");
 }
}

class MakanMalam {
 public void PrintMakanMalam(){
  System.out.println("Ini dari class Makan Malam");
 }
}

class CommandSarapan implements Command{
 private Sarapan sarapan = null;
 public CommandSarapan(Sarapan sarapan) {
  this.sarapan = sarapan;
 }
 @Override
 public void Execute() {
  sarapan.PrintSarapan();
 }
}

class CommandMakanMalam implements Command{
 private MakanMalam mkn_mlm = null;
 public CommandMakanMalam(MakanMalam mkn_mlm) {
  this.mkn_mlm = mkn_mlm;
 }
 @Override
 public void Execute() {
  mkn_mlm.PrintMakanMalam();
 }
}

class Controller{
 private Command cmd;
 public Controller(Command cmd) {
  this.cmd = cmd;
 }
 public void Invoke(){
  cmd.Execute();
 }
}  

C#
using System;

namespace Command
{
 class Program
 {
  public static void Main(string[] args)
  {
   Sarapan sarapan = new Sarapan();
   CommandSarapan cmd_sarapan = new CommandSarapan(sarapan);
   Controller eksekusi = new Controller(cmd_sarapan);
   eksekusi.Invoke();
   
   Console.WriteLine("-------------------");
   MakanMalam mkn_mlm = new MakanMalam();
   CommandMakanMalam cmd_dinner = new CommandMakanMalam(mkn_mlm);
   eksekusi = new Controller(cmd_dinner);
   eksekusi.Invoke();
   
   Console.ReadKey(true);
  }
 }
 
 interface Command{
  void Execute();
 }
 
 class Sarapan{
  public void PrintSarapan(){
   Console.WriteLine("Ini dari class Sarapan");
  }
 }
 
 class MakanMalam {
  public void PrintMakanMalam(){
   Console.WriteLine("Ini dari class Makan Malam");
  }
 }
 
 class CommandSarapan : Command{
  private Sarapan sarapan = null;
  public CommandSarapan(Sarapan sarapan) {
   this.sarapan = sarapan;
  }
  
  public void Execute() {
   sarapan.PrintSarapan();
  }
 }
 
 class CommandMakanMalam : Command{
  private MakanMalam mkn_mlm = null;
  public CommandMakanMalam(MakanMalam mkn_mlm) {
   this.mkn_mlm = mkn_mlm;
  }
  
  public void Execute() {
   mkn_mlm.PrintMakanMalam();
  }
 }
 
 class Controller{
  private Command cmd;
  public Controller(Command cmd) {
   this.cmd = cmd;
  }
  public void Invoke(){
   cmd.Execute();
  }
 }
}  

PHP
<?php

 interface Command{
  function Execute();
 }

 class Sarapan{
  function PrintSarapan(){
   echo("Ini dari class Sarapan< br />");
  }
 }

 class MakanMalam {
  function PrintMakanMalam(){
   echo("Ini dari class Makan Malam< br />");
  }
 }

 class CommandSarapan implements Command{
  private $sarapan = null;
  function __construct($sarapan) {
   $this->sarapan = $sarapan;
  }
  
  function Execute() {
   $this->sarapan->PrintSarapan();
  }
 }

 class CommandMakanMalam implements Command{
  private $mkn_mlm = null;
  function __construct($mkn_mlm) {
   $this->mkn_mlm = $mkn_mlm;
  }
  
  function Execute() {
   $this->mkn_mlm->PrintMakanMalam();
  }
 }

 class Controller{
  private $cmd;
  function __construct($cmd) {
   $this->cmd = $cmd;
  }
  function Invoke(){
   $this->cmd->Execute();
  }
 }
 
 $sarapan = new Sarapan();
 $cmd_sarapan = new CommandSarapan($sarapan);
 $eksekusi = new Controller($cmd_sarapan);
 $eksekusi->Invoke();
  
 echo("-------------------< br />");
 $mkn_mlm = new MakanMalam();
 $cmd_dinner = new CommandMakanMalam($mkn_mlm);
 $eksekusi = new Controller($cmd_dinner);
 $eksekusi->Invoke();
?>  
coba ente perhatikan program diatas, ada sebuah interface command yang mempuyai function execute, sebenarnya kalo pada contoh yang ada diblog lain mungkin nama nya bukan execute tapi invoke karena ini ane bedakan :D biar agak berbeda, yang penting algoritma nya sama... heheheejadi nanti interface ini diturunkan pada sebuah class dimana class turunan ini menjadi wrapper (wadah) class yang lain. yang dikirim melalui constructor class nya , misal pada class CommandSarapan, disitu ane siapin variabel dari class sarapan yang nantinya akan di isi dengan object instance sarapan yang inisialisasinya ada diluar class CommandSarapan, dan dikirim melalui Constructor :D, kemudian pada implementasi function execute kita panggil function milik class sarapan yang akan dieksekusi.. begitu... 
disitu juga ada Class Controller, kalo yang ini ini sebagai wrapper class turunan dari class command seperti class Command sarapan. dan pada class contoller ini ada satu function Invoke yang digunakan untuk mengeksekusi function yang diperlukan...... kalo contoh diatas begini ketika ane mengakses function invoke() maka function ini akan mengakses function execute() milik class Command sarapan. kemudian akan mengakses lagi function PrintSarapan() milik class sarapan... jadi saling berkesinambungan yang dilapisi dengan banyak pembungkus :D ... paham ? kalo gak paham monggo dianalisa kembali, atau tanyakan kepada ane melalui facebook... hehehee untuk postingan kali ini cukup dulu ya ? selanjutnya masi tentang design pattern yang lain yang ane bahas juga pake Java, C# dan PHP... Happy Cooding :)


1 comment:

  1. Thank you for the good writeup. It in fact was a amusement account it.
    Look advanced to more added agreeable from you!
    However, how can we communicate?

    Feel free to surf to my homepage natural cellulite treatment

    ReplyDelete