Wednesday 10 April 2013

Pattern Decorator di Java, C# dan PHP

Ini postingan yang ke 2 di hari yang agak sibuk ini, masi tentang design pattern yang contoh programnya udah ane siapkan tentunya dengan Java, C# dan PHP.. jadi tinggal upload :D kali ini tentang pattern decorator yang termasuk dari pattern kategori structural artinya pattern yang menangani masalah struktur program... definisinya secara bahasa decorator artinya ada perias, sedangkan secara programming adalah pattern yang dapat mengubah nilai2 dalam kelas utama tanpa mengubah bentuk asli dari class utama tersebut,
dalam hal ini ane kasi contoh sebuah binatang, kalo binatang ini dikasi sayap apa makhluk ini akan jadi manusia ?? ya tidak tentunya :D tetep aja binatang ... kalo binatang ini dikasi kaki ? ya tetep aja masi binatang, tidak berubah... konsep dari pattern seperti itu... meskipun dikasi nilai baru tetapi tidak merubah konsep asli dari sebuah object... paham ya ?? kalo udah paham sekarang kita langsung ke implementasi nya di Java, C# dan PHP

Java
package Decorator;

public class MainClass {
 public static void main(String[] args) {
  Binatang binatang = new Burung();
  binatang.Gambarkan();
  System.out.println("-------------------------");
  binatang = new Kaki(binatang);
  binatang.Gambarkan();
  System.out.println("-------------------------");
  binatang = new Sayap(binatang);
  binatang.Gambarkan();
 }
}

interface Binatang{
 public void Gambarkan();
}

class Burung implements Binatang{
 @Override
 public void Gambarkan() {
  System.out.println("Ini binatang Burung");
 }
}

abstract class Decorator implements Binatang{
 protected Binatang binatang = null;
 public Decorator(Binatang binatang) {
  this.binatang = binatang;
 }
}

class Kaki extends Decorator{
 public Kaki(Binatang binatang) {
  super(binatang);
 }
 @Override
 public void Gambarkan() {
  this.binatang.Gambarkan();
  this.CanRun();
 }
 
 private void CanRun(){
  System.out.println("Burung Bisa Lari");
 }
}

class Sayap extends Decorator{
 public Sayap(Binatang binatang) {
  super(binatang);
 }
 
 @Override
 public void Gambarkan() {
  this.binatang.Gambarkan();
  this.CanFly();
 }
 
 private void CanFly(){
  System.out.println("Burung Bisa Terbang");
 }
}


C#
using System;

namespace Decorator
{
 class Program
 {
  public static void Main(string[] args)
  {
   Binatang binatang = new Burung();
   binatang.Gambarkan();
   Console.WriteLine("-------------------------");
   binatang = new Kaki(binatang);
   binatang.Gambarkan();
   Console.WriteLine("-------------------------");
   binatang = new Sayap(binatang);
   binatang.Gambarkan();
   Console.ReadKey(true);
  }
 }
 
 interface Binatang{
  void Gambarkan();
 }
 
 class Burung : Binatang{  
  public void Gambarkan() {
   Console.WriteLine("Ini binatang Burung");
  }
 }
 
 abstract class Decorator : Binatang{
  public Binatang binatang = null;
  public Decorator(Binatang _binatang) {
   
   this.binatang = _binatang;
  }
  
  public abstract void Gambarkan();
 }
 
 class Kaki : Decorator{
  public Kaki(Binatang _binatang) :base(_binatang){
  }
  
  public override void Gambarkan() {
   this.binatang.Gambarkan();
   this.CanRun();
  }
  
  private void CanRun(){
   Console.WriteLine("Burung Bisa Lari");
  }
 }
 
 class Sayap : Decorator{
  public Sayap(Binatang binatang):base(binatang) {
  }  
  
  public override void Gambarkan() {
   this.binatang.Gambarkan();
   this.CanFly();
  }
  
  private void CanFly(){
   Console.WriteLine("Burung Bisa Terbang");
  }
 }
}


PHP
<?php
 interface Binatang{
  function Gambarkan();
 }

 class Burung implements Binatang{  
  function Gambarkan() {
   echo("Ini binatang Burung< br />");
  }
 }

 abstract class Decorator implements Binatang{
  protected $binatang = null;
  function Decorator($binatang) {
   $this->binatang = $binatang;
  }
 }

 class Kaki extends Decorator{
  function __construct($binatang) {
   parent::__construct($binatang);
  }
  
  function Gambarkan() {
   $this->binatang->Gambarkan();
   $this->CanRun();
  }
  
  function CanRun(){
   echo("Burung Bisa Lari< br />");
  }
 }

 class Sayap extends Decorator{
  function __construct($binatang) {
   parent::__construct($binatang);
  }  
  
  function Gambarkan() {
   $this->binatang->Gambarkan();
   $this->CanFly();
  }
  
  function CanFly(){
   echo("Burung Bisa Terbang< br />");
  }
 }

 $binatang = new Burung();
 $binatang->Gambarkan();
 echo("-------------------------< br />");
 $binatang = new Kaki($binatang);
 $binatang->Gambarkan();
 echo("-------------------------< br />");
 $binatang = new Sayap($binatang);
 $binatang->Gambarkan();
?>

Yupzzz ... begitulah penerapan dari design pattern decorator di Java, C# dan PHP... selain itu ente juga bisa mencoba menerapkan pattern di beberapa kasus, misal kasus modifikasi motor... kalo motor di modifikasi dengan ditambah komponennya atau diganti warnanya... ya tetap saja namanya motor :D ... hemmb untuk postingan pattern decorator cukup sampai sini aja dan semoga bermanfaat.. :)

No comments:

Post a Comment