Tuesday 9 April 2013

Pattern Composite di Java, C# dan PHP

alhamdulillah kali ini masi bisa  ngupdate design pattern yang memang harus ane lunasin update nya :D , sekarang gilirannya pattern composite yang ane bahas dan ane terapin di Java, C# dan PHP. sedikit penjelasan tentang pattern ini ya ? hehee.... pattern ini berfungsi untuk menulis objek ke dalam struktur pohon yang mewakili bagian keseluruhan hirarki, selain itu pattern ini memungkinkan client (dalam hal ini ane sering pake "MainClass") memperlakukan object individu dan komposisi seragam. artinya object individu tadi akan diakses secara bersamaan yang dengan komposisi object2 yang ada.. biar tambah bingung :D langsung ane kasi contoh nya yak ??

Java
package Composite;

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

public class MainClass {
 public static void main(String[] args) {
  Mahasiswa mahasiswa_1 = new Mahasiswa("Rizal");
  Mahasiswa mahasiswa_2 = new Mahasiswa("Panjoel");  
  Mahasiswa mahasiswa_3 = new Mahasiswa("Shohif");
  Mahasiswa mahasiswa_4 = new Mahasiswa("Faradis");  
  Mahasiswa mahasiswa_5 = new Mahasiswa("Chanda");
  
  Composite composite_1 = new Composite();
  composite_1.AddComponent(mahasiswa_1);
  composite_1.AddComponent(mahasiswa_2);
  
  Composite composite_2 = new Composite();
  composite_2.AddComponent(mahasiswa_3);
  composite_2.AddComponent(mahasiswa_4);
  
  Composite composite_3 = new Composite();
  composite_3.AddComponent(composite_1);
  composite_3.AddComponent(composite_2);
  composite_3.AddComponent(mahasiswa_5);
  
  System.out.println("Panggil Function PrintHello() dari mahasiswa_1");
  mahasiswa_1.PrintHello();
  System.out.println("-----------------------------------------------");
  System.out.println("Panggil Function PrintHello() dari composite_1");
  composite_1.PrintHello();
  System.out.println("-----------------------------------------------");
  System.out.println("Panggil Function PrintHello() dari composite_2");
  composite_2.PrintHello();
  System.out.println("-----------------------------------------------");
  System.out.println("Panggil Function PrintHello() dari composite_3");
  composite_3.PrintHello();
  System.out.println("-----------------------------------------------");
 }
}

interface Component{
 public void PrintHello();
 public void PrintGoodBye();
}

class Mahasiswa implements Component{
 public Mahasiswa(String name) {
  this.name = name;
 }
 
 private String name;
 
 @Override
 public void PrintHello() {
  System.out.println(this.name+" Mengatakan Hallo");
 }
 
 @Override
 public void PrintGoodBye() {
  System.out.println(this.name+" Mengatakan Selamat tinggal");
 }
}

class Composite implements Component{
 List<Component> list = new ArrayList<Component>();
 @Override
 public void PrintHello() {
  for(Component component : list){
   component.PrintHello();
  }
 }
 @Override
 public void PrintGoodBye() {
  for(Component component : list){
   component.PrintGoodBye();
  }
 }
 public void AddComponent(Component component){
  this.list.add(component);
 }
 
 public void RemoveComponent(Component component){
  this.list.remove(component);
 }
}


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

namespace Composite
{
 class Program
 {
  public static void Main(string[] args)
  {
   Mahasiswa mahasiswa_1 = new Mahasiswa("Rizal");
   Mahasiswa mahasiswa_2 = new Mahasiswa("Panjoel");  
   Mahasiswa mahasiswa_3 = new Mahasiswa("Shohif");
   Mahasiswa mahasiswa_4 = new Mahasiswa("Faradis");  
   Mahasiswa mahasiswa_5 = new Mahasiswa("Chanda");
   
   Composite composite_1 = new Composite();
   composite_1.AddComponent(mahasiswa_1);
   composite_1.AddComponent(mahasiswa_2);
   
   Composite composite_2 = new Composite();
   composite_2.AddComponent(mahasiswa_3);
   composite_2.AddComponent(mahasiswa_4);
   
   Composite composite_3 = new Composite();
   composite_3.AddComponent(composite_1);
   composite_3.AddComponent(composite_2);
   composite_3.AddComponent(mahasiswa_5);
   
   Console.WriteLine("Panggil Function PrintHello() dari mahasiswa_1");
   mahasiswa_1.PrintHello();
   Console.WriteLine("-----------------------------------------------");
   Console.WriteLine("Panggil Function PrintHello() dari composite_1");
   composite_1.PrintHello();
   Console.WriteLine("-----------------------------------------------");
   Console.WriteLine("Panggil Function PrintHello() dari composite_2");
   composite_2.PrintHello();
   Console.WriteLine("-----------------------------------------------");
   Console.WriteLine("Panggil Function PrintHello() dari composite_3");
   composite_3.PrintHello();
   Console.WriteLine("-----------------------------------------------");
   Console.ReadKey(true);
  }
 }
 
 interface Component{
  void PrintHello();
  void PrintGoodBye();
 }
 
 class Mahasiswa : Component{
  public Mahasiswa(string name) {
   this.name = name;
  }
  
  private string name;  
  
  public void PrintHello() {
   Console.WriteLine(this.name+" Mengatakan Hallo");
  }
  
  
  public void PrintGoodBye() {
   Console.WriteLine(this.name+" Mengatakan Selamat tinggal");
  }
 }
 
 class Composite : Component{
  List<Component> list = new List<Component>();
  
  public void PrintHello() {
   foreach(Component component in list){
    component.PrintHello();
   }
  }
  
  public void PrintGoodBye() {
   foreach(Component component in list){
    component.PrintGoodBye();
   }
  }
  public void AddComponent(Component component){
   this.list.Add(component);
  }
  
  public void RemoveComponent(Component component){
   this.list.Remove(component);
  }
 }
}  


PHP
<?php
 interface Component{
  function PrintHello();
  function PrintGoodBye();
 }

 class Mahasiswa implements Component{
  function __construct($name) {
   $this->name = $name;
  }
  
  private $name;  
  
  function PrintHello(){
   echo $this->name." Mengatakan Hallo<br />";
  }  
  
  function PrintGoodBye() {
   echo $this->name." Mengatakan Selamat tinggal<br />";
  }
 }

 class Composite implements Component{
  private $list = Array();
  
  function PrintHello() {
   foreach($this->list as $l){
    $l->PrintHello();
   }
  }
  
  function PrintGoodBye() {
   foreach($this->list as $l){
    $l->PrintGoodBye();
   }
  }
  function AddComponent($component){
   $this->list[] = $component;
  }
  
  function RemoveComponent($index){
   unset($list[$index]);
  }
 }
 
 $mahasiswa_1 = new Mahasiswa("Rizal");
 $mahasiswa_2 = new Mahasiswa("Panjoel");  
 $mahasiswa_3 = new Mahasiswa("Shohif");
 $mahasiswa_4 = new Mahasiswa("Faradis");  
 $mahasiswa_5 = new Mahasiswa("Chanda");
  
 $composite_1 = new Composite();
 $composite_1->AddComponent($mahasiswa_1);
 $composite_1->AddComponent($mahasiswa_2);
  
 $composite_2 = new Composite();
 $composite_2->AddComponent($mahasiswa_3);
 $composite_2->AddComponent($mahasiswa_4);
  
 $composite_3 = new Composite();
 $composite_3->AddComponent($composite_1);
 $composite_3->AddComponent($composite_2);
 $composite_3->AddComponent($mahasiswa_5);
  
 echo("Panggil Function PrintHello() dari mahasiswa_1< br />");
 $mahasiswa_1->PrintHello();
 echo("-----------------------------------------------< br />");
 echo("Panggil Function PrintHello() dari composite_1< br />");
 $composite_1->PrintHello();
 echo("-----------------------------------------------< br />");
 echo("Panggil Function PrintHello() dari composite_2< br />");
 $composite_2->PrintHello();
 echo("-----------------------------------------------< br />");
 echo("Panggil Function PrintHello() dari composite_3< br />");
 $composite_3->PrintHello();
 echo("-----------------------------------------------< br />");
?>  
hemmbb..... untuk analisa nya coba ente belajar mandiri dulu ya ? :D .. toh tadi ane kasi definisinya.. dari situ juga sudah hampir jelas, biar lebih jelas coba ente analisa kode program nya di Java, C# dan PHP yang ane kasi tadi.. hehehee.. karena ane juga lagi sibuk.. wkwkwkwkwk.. untuk postingan design pattern composite cukup sampek disini dulu ya ? smoga bermanfaat buat ane, ente dan pengunjung blog ini :)

No comments:

Post a Comment