Wednesday 10 April 2013

Pattern Visitor di Java, C# dan PHP

Postingan ini yang ke 3 dihari ini, setelah posting tentang pattern decorator kali ini ane pengen upload pattern visitor yang berkategori behavior design pattern dan seperti biasa ane kasi contoh penerapannya di Java, C# dan PHP :D .. akan ane jelasin sedikit tentang pattern ini... pattern visitor ini memungkinkan client dalam hal ini ane sering pake MainClass untuk mendefinisikan suatu operasi baru tanpa mengubah element sebuah class ... dalam hal ini seperti nama pattern nya, ane kasi sebuah contoh tentang travelling...
jadi kita sudah punya rute2 yang harus dilewati kemudian kita mempunyai 2 tim yang kedua nya harus melewati rute yang telah ditentukan.. rute A harus dilewati pertama kali oleh semua tim.. peraturannya seperti itu :D ... hubunganya sama pattern visitor apa ? seperti yang ane definisikan tadi, memungkinkan untuk mendefinisikan suatu operasi tanpa merubah element class, jadi ketika tim pertama rute yang telah di tentukan, maka tim ke dua juga harus melewati rute sesuai yang telah dilewati tim pertama.. jadi g merubah rute... hehee paham ya ?? biar tambah bingung dan pusing ane kasi contoh program nya langsung ya pake Java, C# dan PHP

Java
package Visitor;

import java.util.ArrayList;
import java.util.List;

public class MainClass {
 public static void main(String[] args) {
  Contorller controller = new Contorller();
  controller.Add(new RuteA("Surabaya"));
  controller.Add(new RuteB("Jakarta"));
  
  controller.Display(new VisitorA("Tim A"));
  controller.Display(new VisitorB("Tim B"));
 }
}

abstract class Visitor{
 public abstract void TimA(RuteA ruteA);
 public abstract void TimB(RuteB ruteB);
}

abstract class Rute{
 public abstract void Display(Visitor visitor);
}

class RuteA extends Rute{
 public RuteA(String name){
  this.name = name;
 }
 
 public String name;
 @Override
 public void Display(Visitor visitor)
 {
  visitor.TimA(this);
 }
}

class RuteB extends Rute{
 public RuteB(String name){
  this.name = name;
 }
 
 public String name;
 @Override
 public void Display(Visitor visitor)
 {
  visitor.TimB(this);
 }
}

class VisitorA extends Visitor{
 public VisitorA(String name){
  this.name = name;
 }
 
 private String name;
 @Override
 public void TimA(RuteA ruteA)
 {
  System.out.println(ruteA.name+" di lewati oleh "+this.name);
 }
 @Override
 public void TimB(RuteB ruteB)
 {
  System.out.println(ruteB.name+" di lewati oleh "+this.name);
 }
}

class VisitorB extends Visitor{
 public VisitorB(String name){
  this.name = name;
 }
 
 private String name;
 @Override
 public void TimA(RuteA ruteA)
 {
  System.out.println(ruteA.name+" di lewati oleh "+this.name);
 }
 @Override
 public void TimB(RuteB ruteB)
 {
  System.out.println(ruteB.name+" di lewati oleh "+this.name);
 }
}

class Contorller{
 List<Rute> list_rute = new ArrayList<Rute>();
 public void Add(Rute rute){
  this.list_rute.add(rute);
 }
 public void Remove(Rute rute){
  this.list_rute.remove(rute);
 }
 public void Display(Visitor visitor){
  for(Rute my_rute : list_rute){
   my_rute.Display(visitor);
  }
 }
}  

C#
using System;
using System.Collections.Generic;

namespace Visitor
{
 class Program
 {
  public static void Main(string[] args)
  {
   Contorller controller = new Contorller();
   controller.Add(new RuteA("Surabaya"));
   controller.Add(new RuteB("Jakarta"));
   
   controller.Display(new VisitorA("Tim A"));
   controller.Display(new VisitorB("Tim B"));
   Console.ReadKey(true);
  }
 }
 
 abstract class Visitor{
  public abstract void TimA(RuteA ruteA);
  public abstract void TimB(RuteB ruteB);
 }
 
 abstract class Rute{
  public abstract void Display(Visitor visitor);
 }
 
 class RuteA : Rute{
  public RuteA(String name){
   this.name = name;
  }
  
  public string name;
  
  public override void Display(Visitor visitor)
  {
   visitor.TimA(this);
  }
 }
 
 class RuteB : Rute{
  public RuteB(string name){
   this.name = name;
  }
  
  public string name;
  
  public override void Display(Visitor visitor)
  {
   visitor.TimB(this);
  }
 }
 
 class VisitorA : Visitor{
  public VisitorA(string name){
   this.name = name;
  }
  
  private string name;
  
  public override void TimA(RuteA ruteA)
  {
   Console.WriteLine(ruteA.name+" di lewati oleh "+this.name);
  }
  
  public override void TimB(RuteB ruteB)
  {
   Console.WriteLine(ruteB.name+" di lewati oleh "+this.name);
  }
 }
 
 class VisitorB : Visitor{
  public VisitorB(string name){
   this.name = name;
  }
  
  private string name;
  
  public override void TimA(RuteA ruteA)
  {
   Console.WriteLine(ruteA.name+" di lewati oleh "+this.name);
  }
  
  public override void TimB(RuteB ruteB)
  {
   Console.WriteLine(ruteB.name+" di lewati oleh "+this.name);
  }
 }
 
 class Contorller{
  List<Rute> list_rute = new List<Rute>();
  public void Add(Rute rute){
   this.list_rute.Add(rute);
  }
  public void Remove(Rute rute){
   this.list_rute.Remove(rute);
  }
  public void Display(Visitor visitor){
   foreach(Rute my_rute in list_rute){
    my_rute.Display(visitor);
   }
  }
 }
}  

PHP
<?php
 abstract class Visitor{
  abstract function TimA($ruteA);
  abstract function TimB($ruteB);
 }

 abstract class Rute{
  public abstract function Display($visitor);
 }

 class RuteA extends Rute{
  function __construct($name){
   $this->name = $name;
  }
  
  public $name;
  
  function Display($visitor)
  {
   $visitor->TimA($this);
  }
 }

 class RuteB extends Rute{
  function __construct($name){
   $this->name = $name;
  }
  
  public $name;
  
  function Display($visitor)
  {
   $visitor->TimB($this);
  }
 }

 class VisitorA extends Visitor{
  function __construct($name){
   $this->name = $name;
  }
  
  private $name;
  
  function TimA($ruteA)
  {
   echo($ruteA->name." di lewati oleh ".$this->name.'< br />');
  }
  
  function TimB($ruteB)
  {
   echo($ruteB->name." di lewati oleh ".$this->name.'< br />');
  }
 }

 class VisitorB extends Visitor{
  function __construct($name){
   $this->name = $name;
  }
  
  private $name;
  
  function TimA($ruteA)
  {
   echo($ruteA->name." di lewati oleh ".$this->name.'< br />');
  }
  
  function TimB($ruteB)
  {
   echo($ruteB->name." di lewati oleh ".$this->name.'< br />');
  }
 }

 class Contorller{
  private $list_rute = Array();
  function Add($rute){
   $this->list_rute[] = $rute;
  }
  function Remove($index){
   unset($this->list_rute[$index]);
  }
  function Display($visitor){
   foreach($this->list_rute as $list){
    $list->Display($visitor);
   }
  }
 }
 
 $controller = new Contorller();
 $controller->Add(new RuteA("Surabaya"));
 $controller->Add(new RuteB("Jakarta"));
  
 $controller->Display(new VisitorA("Tim A"));
 $controller->Display(new VisitorB("Tim B"));
?>  

gampang kan penerapannya di Java, C# dan PHP ? :D wkwkwkwkwkwk... bagi yang ngerti gampang... bagi yang gak ngerti yo mbohh wkwkwkwkwk... oke guys.. sekian dulu untuk postingan pattern visitor ini semoga bermanfaat... keep cooding :)

No comments:

Post a Comment