Thursday, 11 April 2013

Pattern Mediator di Java, C# dan PHP

Setelah update tentang pattern observer, langsung ane terusin update juga design pattern yang ane bahas terakhir yaitu tentang pattern mediator dan implementasinya di Java, C# dan PHP (mengejar target gan) :D ... pattern mediator ini sama seperti observer yang berkategori design pattern behaviour.  Fungsi dari pattern ini adalah memungkinkan interaksi antara object sehingga ketika object berinteraksi dengan object lainnya sama2 dapat memberi informasi baru ke dalam object tersebut ... contoh kasus nya seperti aplikasi chating, jika ada 2 client lagi chatingan maka ke dua nya sangat mungkin untuk bertukar informasi saat chating ??
ya kan ?? :D kalo gak bisa bertukar informasi ya berarti bukan chating...  wkwkwkwkwkwk... dan 2 client tadi kita ibaratkan seperti object yang saling berinteraksi... biar lebih paham akan ane coba implementasinya di Java, C# dan PHP...

Java
package Mediator;

public class MainClass {
 public static void main(String[] args) {
  MediatorConcrete mediator = new MediatorConcrete();
  
  Friend1 friend1 = new Friend1(mediator);
  Friend2 friend2 = new Friend2(mediator);
  
  mediator.SetFriend1(friend1);
  mediator.SetFriend2(friend2);
  
  friend1.Send("I love U");
  friend2.Send("I Love U too");
 }
}

abstract class Mediator{
 public abstract void Send(Friend friend,String message);
}

class MediatorConcrete extends Mediator{
 private Friend1 friend1;
 private Friend2 friend2;
 
 public void SetFriend1(Friend1 friend1){
  this.friend1 = friend1;
 }
 
 public void SetFriend2(Friend2 friend2){
  this.friend2 = friend2;
 }
 
 @Override
 public void Send(Friend friend, String message) {
  if(friend == friend1){
   friend2.Notify(message);
  }else{
   friend1.Notify(message);
  }
 }
}

abstract class Friend{
 public Friend(Mediator mediator) {
  this.mediator = mediator;
 }
 protected Mediator mediator;
}

class Friend1 extends Friend{
 public Friend1(Mediator mediator) {
  super(mediator);
 }
 
 public void Send(String message){
  mediator.Send(this, message);
 }
 
 public void Notify(String message){
  System.out.println("Friend 1 menerima pesan "+message);
 }
}

class Friend2 extends Friend{
 public Friend2(Mediator mediator) {
  super(mediator);
 }
 
 public void Send(String messages){
  mediator.Send(this, messages);
 }
 
 public void Notify(String message){
  System.out.println("Friend 2 menerima pesan "+message);
 }
}


C#
using System;

namespace Mediator
{
 class Program
 {
  public static void Main(string[] args)
  {
   MediatorConcrete mediator = new MediatorConcrete();
  
   Friend1 friend1 = new Friend1(mediator);
   Friend2 friend2 = new Friend2(mediator);
   
   mediator.Friend1 = friend1;
   mediator.Friend2 = friend2;
   
   friend1.Send("I love U");
   friend2.Send("I Love U too");
   
   Console.ReadKey(true);
  }
 }
 
 abstract class Mediator{
  public abstract void Send(Friend friend,string message);
 }
 
 class MediatorConcrete : Mediator{
  private Friend1 friend1;
  private Friend2 friend2;
  
  public Friend1 Friend1 {
   get { return friend1; }
   set { friend1 = value; }
  } 
  
  public Friend2 Friend2 {
   get { return friend2; }
   set { friend2 = value; }
  }
  
  public override void Send(Friend friend, string message) {
   if(friend == friend1){
    friend2.Notify(message);
   }else{
    friend1.Notify(message);
   }
  }
 }
 
 abstract class Friend{
  public Friend(Mediator mediator) {
   this.mediator = mediator;
  }
  protected Mediator mediator;
 }
 
 class Friend1 : Friend{
  public Friend1(Mediator mediator):base(mediator) {
  }
  
  public void Send(string message){
   mediator.Send(this, message);
  }
  
  public void Notify(string message){
   Console.WriteLine("Friend 1 menerima pesan "+message);
  }
 }
 
 class Friend2 : Friend{
  public Friend2(Mediator mediator):base(mediator){
  }
  
  public void Send(string messages){
   mediator.Send(this, messages);
  }
  
  public void Notify(string message){
   Console.WriteLine("Friend 2 menerima pesan "+message);
  }
 }
}


PHP
<?php
 abstract class Mediator{
  public abstract function Send($friend,$message);
 }

 class MediatorConcrete extends Mediator{
  private $friend1;
  private $friend2;
  
  function SetFriend1($friend1){
   $this->friend1 = $friend1;
  }
  
  function SetFriend2($friend2){
   $this->friend2 = $friend2;
  }  
  
  function Send($friend,$message) {
   if($friend == $this->friend1){
    $this->friend2->Notify($message);
   }else{
    $this->friend1->Notify($message);
   }
  }
 }

 abstract class Friend{
  function __construct($mediator) {
   $this->mediator = $mediator;
  }
  protected $mediator;
 }

 class Friend1 extends Friend{
  function __construct($mediator) {
   parent::__construct($mediator);
  }
  
  function Send($message){
   $this->mediator->Send($this, $message);
  }
  
  function Notify($message){
   echo("Friend 1 menerima pesan ".$message."< br />");
  }
 }

 class Friend2 extends Friend{
  function __construct($mediator) {
   parent::__construct($mediator);
  }
  
  function Send($messages){
   $this->mediator->Send($this,$messages);
  }
  
  function Notify($message){
   echo("Friend 2 menerima pesan ".$message."< br />");
  }
 }
 
 $mediator = new MediatorConcrete();
  
 $friend1 = new Friend1($mediator);
 $friend2 = new Friend2($mediator);
  
 $mediator->SetFriend1($friend1);
 $mediator->SetFriend2($friend2);
  
 $friend1->Send("I love U");
 $friend2->Send("I Love U too");
?>

Biar lebih paham lagi, coba ente analisa lagi program diatas, dan tentunya seperti itulah interaksi antar object yang memungkinkan untuk saling memberikan informasi dengan menggunakan mediator tentunya :D hehee.. sekian dulu ya ? dengan berakhirnya postingan ini, berakhir juga pembahasan ane tentang design pattern dan penerapannya di Java, C# dan PHP... semoga bermanfaat bagi ane, ente dan pengunjung blog ini :) ... happy cooding

No comments:

Post a Comment