TUTORIAL CODEIGNITER : APLIKASI WEBSITE / BLOG (WEBLOG) SEDERHANA DENGAN CODEIGNITER

Oke gan, langsung saja untuk screen shoot contoh aplikasi website, weblog, blog dengan codeigniter yang ane kasi, seperti di bawah ini...

Tutorial HTML

HTML merupakan bahasa dasar pembuatan web. Disebut dasar karena dalam membuat web, jika hanya menggunakan HTML tampilan web terasa hambar. Terdapat banyak bahasa pemograman web yang ditujukan untuk memanipulasi kode HTML, seperti ...

TUTORIAL ORACLE - KONEKSI ORACLE KE JAVA, PHP DAN C# (C-SHARP)

Disitu juga ane kasi contoh aplikasi CRUD nya yang bisa ente download Gratisss :D ...

Tampilkan postingan dengan label Design Pattern. Tampilkan semua postingan
Tampilkan postingan dengan label Design Pattern. Tampilkan semua postingan

Kamis, 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

Pattern Observer di Java, C# dan PHP

Setelah jumatan ada kuliah... waktu nya tidur siang si sebenarna.. tapi karena memang sudah kewajiban untuk mengikuti mata kuliah ke PGRI-an..  ya diikuti ajalah, skalian ane juga mau update lagi tentag design pattern yang rencana nya ane akhiri semua pembahasan design pattern hari ini.. semoga aja bisa... hehehee.. oke kali ini tentang pattern observer yang akan ane bahas dan penerapannya di Java,C# dan PHP .. pattern ini termasuk dalam kategori behaviour  yang menangani kelakuan sebuah program... dan juga termasuk sering dipakai, dan juga sering kita temui...
Contoh real nya yaitu seperti notifikasi di facebook... konsep kerja pattern ini adalah melaporkan secara otomatis ke server jika ada sebuah data/proses baru dan si server melaporkan ke semua client yang telah didaftarkan sebelumnya... sekarang ane akan mencoba untuk mengimplementasikannya di Java, C# dan PHP

Java
package ObServer;

import java.util.*;

public class MainClass {
public static void main(String[] args) {
SubjectConcrete subject = new SubjectConcrete();

subject.Add(new User(subject, "Rizal"));
subject.Add(new User(subject, "Afani"));

subject.SetSubjectStatus("Selamat Pagi");
subject.Notivy();
}
}

interface Subject{
public void Add(ObServer observer);
public void Remove(ObServer observer);
public void Notivy();
}

interface ObServer{
public void DoUpdate();
}

class SubjectConcrete implements Subject{
private List<ObServer> list_observer = new ArrayList<ObServer>();
private String SubjectStatus;
public void SetSubjectStatus(String status){
this.SubjectStatus = status;
}
public String GetSubjectStatus(){
return this.SubjectStatus;
}
@Override
public void Add(ObServer observer) {
list_observer.add(observer);
}

@Override
public void Remove(ObServer observer) {
list_observer.remove(observer);
}

@Override
public void Notivy() {
for(ObServer list : list_observer){
list.DoUpdate();
}
}
}

class User implements ObServer{
private String name;
private SubjectConcrete subject;
public User(SubjectConcrete subject,String name) {
this.subject = subject;
this.name = name;
}

public void SetName(String name){
this.name = name;
}

public String GetName(){
return this.name;
}

public void SetSubject(SubjectConcrete subject){
this.subject = subject;
}

public SubjectConcrete GetSubject(){
return this.subject;
}

@Override
public void DoUpdate() {
System.out.println(this.name+" membaca status Baru '"+this.subject.GetSubjectStatus()+"'");
}
}


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

namespace Observer
{
class Program
{
public static void Main(string[] args)
{
SubjectConcrete subject = new SubjectConcrete();

subject.Add(new User(subject, "Rizal"));
subject.Add(new User(subject, "Afani"));

subject.SetSubjectStatus("Selamat Pagi");
subject.Notivy();

Console.ReadKey(true);
}
}

interface Subject{
void Add(ObServer observer);
void Remove(ObServer observer);
void Notivy();
}

interface ObServer{
void DoUpdate();
}

class SubjectConcrete : Subject{
private List<ObServer> list_observer = new List<ObServer>();
private string SubjectStatus;
public void SetSubjectStatus(string status){
this.SubjectStatus = status;
}
public string GetSubjectStatus(){
return this.SubjectStatus;
}

public void Add(ObServer observer) {
list_observer.Add(observer);
}


public void Remove(ObServer observer) {
list_observer.Remove(observer);
}


public void Notivy() {
foreach(ObServer list in list_observer){
list.DoUpdate();
}
}
}

class User : ObServer{
private string name;
private SubjectConcrete subject;
public User(SubjectConcrete subject,string name) {
this.subject = subject;
this.name = name;
}

public void SetName(string name){
this.name = name;
}

public string GetName(){
return this.name;
}

public void SetSubject(SubjectConcrete subject){
this.subject = subject;
}

public SubjectConcrete GetSubject(){
return this.subject;
}


public void DoUpdate() {
Console.WriteLine(this.name+" membaca status Baru '"+this.subject.GetSubjectStatus()+"'");
}
}
}


PHP
<?php
interface Subject{
function Add($index,$observer);
function Remove($index);
function Notivy();
}

interface ObServer{
function DoUpdate();
}

class SubjectConcrete implements Subject{
private $list_observer = Array();
private $SubjectStatus;
function SetSubjectStatus($status){
$this->SubjectStatus = $status;
}
function GetSubjectStatus(){
return $this->SubjectStatus;
}

function Add($index,$observer) {
$this->list_observer[$index] = $observer;
}

function Remove($index) {
unset($this->list_observer[$index]);
}

function Notivy() {
foreach($this->list_observer as $list){
$list->DoUpdate();
}
}
}

class User implements ObServer{
private $name;
private $subject;
function __construct($subject,$name) {
$this->subject = $subject;
$this->name = $name;
}

function SetName($name){
$this->name = $name;
}

function GetName(){
return $this->name;
}

function SetSubject($subject){
$this->subject = $subject;
}

function GetSubject(){
return $this->subject;
}

function DoUpdate() {
echo($this->name." membaca status Baru '".$this->subject->GetSubjectStatus()."'< br />");
}
}

$subject = new SubjectConcrete();

$subject->Add('Rizal',new User($subject, "Rizal"));
$subject->Add('Afani',new User($subject, "Afani"));

$subject->SetSubjectStatus("Selamat Pagi");
$subject->Notivy();
?>

Pattern Bridge di Java, C# dan PHP

hari yang tidak terlalu cerah tapi juga tidak terlalu mendung, disambut dengan menulis design pattern di blog ini agar cepet terlunasi target ane selama 2 minggu ini :D... kali ini giliran pattern bridge yang ane bahas dan ane terapin di Java, C# dan PHP... secara bahasa arti dari bridge ini adalah penghubung/jembatan... fungsinya adalah untuk memisahkan antara abstraksi dan implementasinya... disini ane akan coba implementassinya menggunakan sebuah kartu pengenal (kartu KTP dan kartu mahasiswa) yang pembentukan object instance nya dipisahkan dengan interface nya...
Beginilah implementasinya di Java, C# dan PHP

Java
package Bridge;

public class MainClass {
public static void main(String[] args) {
RunController run = new RunController();

run.SetBiodata(new KTP("Ahmad Rizal Afani","Kertosari","Jomblo"));
run.DisplayText();
System.out.println("--------------------------------------------------------");
run.SetBiodata(new KTM("1110100601", "Ahmad Rizal Afani", "Jln. Ikan Hiu 30 Kertosari, Banyuwangi"));
run.DisplayText();
}
}

interface Biodata{
public void DisplayText();
}

abstract class Controler{
protected Biodata biodata;
public void SetBiodata(Biodata biodata){
this.biodata = biodata;
}
public void DisplayText(){
biodata.DisplayText();
}
}

class RunController extends Controler{}

class KTP implements Biodata{
public KTP(String name,String alamat,String status_hubungan) {
this.name = name;
this.alamat = alamat;
this.status_hubungan = status_hubungan;
}

private String name,alamat,status_hubungan;

@Override
public void DisplayText() {
System.out.println("Class KTP implementasi dari interface Biodata\n");
System.out.println("Nama \t: "+name);
System.out.println("Alamat \t: "+alamat);
System.out.println("Status \t: "+status_hubungan);
System.out.println();
}
}

class KTM implements Biodata{
public KTM(String nim,String nama,String alamat) {
this.nim = nim;
this.nama = nama;
this.alamat = alamat;
}

private String nim,nama,alamat;

@Override
public void DisplayText() {
System.out.println("Class KTM implementasi dari interface Biodata\n\n");
System.out.println("No. Induk \t: "+nim);
System.out.println("Nama \t\t: "+nama);
System.out.println("Alamat \t\t: "+alamat);
System.out.println();
}
}


C#
/*
* Created by SharpDevelop.
* User: FaiQ
* Date: 31/03/2013
* Time: 17:32
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;

namespace Bridge
{
class Program
{
public static void Main(string[] args)
{
RunController run = new RunController();

run.SetBiodata(new KTP("Ahmad Rizal Afani","Kertosari","Jomblo"));
run.DisplayText();
Console.WriteLine("--------------------------------------------------------");
run.SetBiodata(new KTM("1110100601", "Ahmad Rizal Afani", "Jln. Ikan Hiu 30 Kertosari, Banyuwangi"));
run.DisplayText();

Console.ReadKey(true);
}
}

interface Biodata{
void DisplayText();
}

abstract class Controler{
protected Biodata biodata;
public void SetBiodata(Biodata biodata){
this.biodata = biodata;
}
public void DisplayText(){
biodata.DisplayText();
}
}

class RunController : Controler{}

class KTP : Biodata{
public KTP(string name,string alamat,string status_hubungan) {
this.name = name;
this.alamat = alamat;
this.status_hubungan = status_hubungan;
}

private string name,alamat,status_hubungan;

public void DisplayText() {
Console.WriteLine("Class KTP implementasi dari interface Biodata\n");
Console.WriteLine("Nama \t: "+name);
Console.WriteLine("Alamat \t: "+alamat);
Console.WriteLine("Status \t: "+status_hubungan);
Console.WriteLine();
}
}

class KTM : Biodata{
public KTM(string nim,string nama,string alamat) {
this.nim = nim;
this.nama = nama;
this.alamat = alamat;
}

private string nim,nama,alamat;

public void DisplayText() {
Console.WriteLine("Class KTM implementasi dari interface Biodata\n\n");
Console.WriteLine("No. Induk \t: "+nim);
Console.WriteLine("Nama \t\t: "+nama);
Console.WriteLine("Alamat \t\t: "+alamat);
Console.WriteLine();
}
}
}


PHP
<?php
interface Biodata{
function DisplayText();
}

abstract class Controler{
protected $biodata;
function SetBiodata($biodata){
$this->biodata = $biodata;
}
function DisplayText(){
$this->biodata->DisplayText();
}
}

class RunController extends Controler{}

class KTP implements Biodata{
function __construct($name,$alamat,$status_hubungan) {
$this->name = $name;
$this->alamat = $alamat;
$this->status_hubungan = $status_hubungan;
}

private $name,$alamat,$status_hubungan;


function DisplayText() {
echo("<b>Class KTP implementasi dari interface Biodata</b>< br />< br />");
echo("Nama \t: ".$this->name.'< br />');
echo("Alamat \t: ".$this->alamat.'< br />');
echo("Status \t: ".$this->status_hubungan.'< br />');
}
}

class KTM implements Biodata{
function __construct($nim,$nama,$alamat) {
$this->nim = $nim;
$this->nama = $nama;
$this->alamat = $alamat;
}

private $nim,$nama,$alamat;


function DisplayText() {
echo("<b>Class KTM implementasi dari interface Biodata</b><br /><br />");
echo("No-> Induk \t: ".$this->nim.'< br />');
echo("Nama \t\t: ".$this->nama.'< br />');
echo("Alamat \t\t: ".$this->alamat.'< br />');
}
}

$run = new RunController();

$run->SetBiodata(new KTP("Ahmad Rizal Afani","Kertosari","Jomblo"));
$run->DisplayText();
echo("--------------------------------------------------------< br />");
$run->SetBiodata(new KTM("1110100601", "Ahmad Rizal Afani", "Jln-> Ikan Hiu 30 Kertosari, Banyuwangi"));
$run->DisplayText();
?>
pemisahan abstraksi dan implementasinya bisa ente lihat waktu class runController diakses dan kemudian memanggil method yang diwariskan dari parrent class nya... kemudian juga bisa ente lihat waktu method setBiodata diakses dan di isikan dengan object instance class implementasi dari interface biodata :) .. bingung ?? kalo bingung coba ente analisa lagi... ulangi lagi... sampek akhirnya ente paham :D ... sekian dulu untuk postingan kali ini, semoga bermanfaat..

Pattern Chain Of Responsibility di Java, C# dan PHP

Design pattern masi menjadi bahasan di postingan kali ini, sekarang giliran pattern Chain of responsibility untuk ane posting dan contoh implementasinya di Java, C# dan PHP... sebenarnya pattern ini rencananya ane posting tadi pagi... berhubung tadi gak sempet jadi baru ane posting sekarang.. hari sudah sore dan ane pun belum pulang dari kampus... temen2 yang lain juga udah pada pulang, duduk ditemani dengan adik angkatan yang gak ane kenal :D ...
ya gapapalah... hidup itu butuh perjuangan dan pengorbanan.... chain of responsibility arti secara bahasa adalah rantai tanggung jawab.. sesuai namanya, pattern ini mempunyai konsep kerja seperti rantai yang mengolah beberapa proses yang tersambung... jadi pattern ini memungkinkan untuk membuat hubungan terikat antar object... object - object itu berisi sebuah proses, jika sebuah proses gagal menangani permasalahan maka akan dilanjutkan ke proses selanjutnya yang terikat dengan proses tersebut... begitu seterusnya... jika sebuah object berhasil menangani permasalahan maka tidak perlu melanjutkan ke proses selanjutnya... begitulah konsep kerja dari pattern ini yang berkategori design pattern behaviour..
sekarang saatnya ane implementasikan ke dalam program tentunya dengan Java, C# dan PHP :D

Java
package ChainOfResponsibility;

public class MainClass {
public static void main(String[] args) {
PlanetHandler planet = CiptakanSambunganRantai();
planet.SambungRantai(Planet.Jupiter);
planet.SambungRantai(Planet.Mars);
}

private static PlanetHandler CiptakanSambunganRantai(){
PlanetHandler merkurius = new MerkuriusHandler();
PlanetHandler bumi = new BumiHandler();
PlanetHandler mars = new MarsHandler();

merkurius.SetSuccessor(bumi);
bumi.SetSuccessor(mars);

return merkurius;
}
}

abstract class PlanetHandler{
PlanetHandler successor;
public void SetSuccessor(PlanetHandler successor){
this.successor = successor;
}

public abstract void SambungRantai(Planet planet);
}

enum Planet{
Merkurius,Venus,Bumi,Mars,Jupiter,Uranus,Neptunus,Pluto;
}

class MerkuriusHandler extends PlanetHandler{
@Override
public void SambungRantai(Planet planet) {
if(planet == Planet.Merkurius){
System.out.println("Merkurius handler menghandle "+planet);
System.out.println("Merkurius adalah planet terdekat dengan matahari");
}else{
System.out.println("Merkurius handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class BumiHandler extends PlanetHandler{
@Override
public void SambungRantai(Planet planet) {
if(planet == Planet.Bumi){
System.out.println("Bumi handler menghandle "+planet);
System.out.println("Bumi adalah tempat tinggal manusia");
}else{
System.out.println("Bumi handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class MarsHandler extends PlanetHandler{
@Override
public void SambungRantai(Planet planet) {
if(planet == Planet.Mars){
System.out.println("Mars handler menghandle "+planet);
System.out.println("Mars adalah tempat tinggal alien");
}else{
System.out.println("Mars handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}


C#
using System;

namespace Chain
{
class Program
{
public static void Main(string[] args)
{
PlanetHandler planet = CiptakanSambunganRantai();
planet.SambungRantai(Planet_.Planet.Jupiter);
planet.SambungRantai(Planet_.Planet.Mars);
Console.ReadKey(true);
}

private static PlanetHandler CiptakanSambunganRantai(){
PlanetHandler merkurius = new MerkuriusHandler();
PlanetHandler bumi = new BumiHandler();
PlanetHandler mars = new MarsHandler();

merkurius.SetSuccessor(bumi);
bumi.SetSuccessor(mars);

return merkurius;
}
}

abstract class PlanetHandler{
protected PlanetHandler successor;
public void SetSuccessor(PlanetHandler successor){
this.successor = successor;
}

public abstract void SambungRantai(Planet_.Planet planet);
}

class Planet_{
public enum Planet{
Merkurius,Venus,Bumi,Mars,Jupiter,Uranus,Neptunus,Pluto
}
}

class MerkuriusHandler : PlanetHandler{

public override void SambungRantai(Planet_.Planet planet) {
if(planet == Planet_.Planet.Merkurius){
Console.WriteLine("Merkurius handler menghandle "+planet);
Console.WriteLine("Merkurius adalah planet terdekat dengan matahari");
}else{
Console.WriteLine("Merkurius handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class BumiHandler : PlanetHandler{

public override void SambungRantai(Planet_.Planet planet) {
if(planet == Planet_.Planet.Bumi){
Console.WriteLine("Bumi handler menghandle "+planet);
Console.WriteLine("Bumi adalah tempat tinggal manusia");
}else{
Console.WriteLine("Bumi handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class MarsHandler : PlanetHandler{

public override void SambungRantai(Planet_.Planet planet) {
if(planet == Planet_.Planet.Mars){
Console.WriteLine("Mars handler menghandle "+planet);
Console.WriteLine("Mars adalah tempat tinggal alien");
}else{
Console.WriteLine("Mars handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}
}


PHP
<?php
class EnumPlanet{
static $planet = array(
'Merkurius' => 'Merkurius',
'Venus' => 'Venus',
'Bumi' => 'Bumi',
'Mars' => 'Mars',
'Jupiter' => 'Jupiter',
'Uranus' => 'Uranus',
'Neptunus' => 'Neptunus',
'Pluto' => 'Pluto'
);
}

abstract class PlanetHandler{
protected $successor;
function SetSuccessor($successor){
$this->successor = $successor;
}
abstract function SambungRantai($planet);
}

class MerkuriusHandler extends PlanetHandler{
function SambungRantai($planet) {
if($planet == EnumPlanet::$planet['Merkurius']){
echo("Merkurius handler menghandle ".$planet.'< br />');
echo("Merkurius adalah planet terdekat dengan matahari< br />");
}else{
echo("Merkurius handler tidak menghandle ".$planet.'< br />');
if($this->successor != null){
$this->successor->SambungRantai($planet);
}
}
}
}

class BumiHandler extends PlanetHandler{
function SambungRantai($planet) {
if($planet == EnumPlanet::$planet['Bumi']){
echo("Bumi handler menghandle ".$planet.'<br />');
echo("Bumi adalah tempat tinggal manusia< br />");
}else{
echo("Bumi handler tidak menghandle ".$planet.'< br />');
if($this->successor != null){
$this->successor->SambungRantai($planet);
}
}
}
}

class MarsHandler extends PlanetHandler{
function SambungRantai($planet) {
if($planet == EnumPlanet::$planet['Mars']){
echo("Mars handler menghandle ".$planet.'< br />');
echo("Mars adalah tempat tinggal alien< br />");
}else{
echo("Mars handler tidak menghandle ".$planet.'< br />');
if($this->successor != null){
$this->successor->SambungRantai($planet);
}
}
}
}

function CiptakanSambunganRantai(){
$merkurius = new MerkuriusHandler();
$bumi = new BumiHandler();
$mars = new MarsHandler();

$merkurius->SetSuccessor($bumi);
$bumi->SetSuccessor($mars);

return $merkurius;
}

$planet = CiptakanSambunganRantai();
$planet->SambungRantai(EnumPlanet::$planet['Jupiter']);
$planet->SambungRantai(EnumPlanet::$planet['Mars']);
?>
Hemmb... beginilah ceritanya design pattern responsibility... :) saling berkesinambungan antar prosesnya, ente tentunya bisa analisa sendiri ya ?? soalnya ini sudah sore dan ane mau pulang :D... cukup dulu yak ?? semoga bermanfaat.. keep cooding :)

Rabu, 10 April 2013

Pattern Iterator di Java, C# dan PHP

Sudah lebih dari seminggu ane posting design pattern dan implementasinya di Java, C# dan PHP... ini pattern ke 5 terakhir yang ane eksekusi setelah tadi ane posting tentang flyweight kali ini tentang pattern iterator.. secara bahasa iterator ini gak ada artinya.. maksudnya dalam bahasa indonesia ya artinya iterator :D, dalam bahasa pemrograman maksud dari pattern iterator ini adalah algortima yang menyediakan cara untuk mengakses elemen dari suatu obyek berurutan tanpa memperlihatkan representasi yang mendasarinya. konsep kerjanya si sama seperti tabel, misal ane punya tabel produk, ada 2 field yaitu nama produk dan harganya..
kita ibaratkan tabel ini adalah object dan produk2 itu juga object.. jadi didalam sebuah object ada juga list object, tentunya saat kita ingin mengakses sebuah produk kita tidak perlu tau bagaimana bentuk asli atau urutan dari list produk, langsung saja kita ambil yang kita butuhkan.... biar tambah jelas coba kita langsung terapkan ke dalam Java, C# dan PHP

Java

package Iterator;

import java.util.ArrayList;
import java.util.Iterator;

public class MainClass {
public static void main(String[] args) {
Item item_1 = new Item("Hardisk", 500);
Item item_2 = new Item("Memory", 200);
Item item_3 = new Item("Processor", 400);

Menu menu = new Menu();
menu.AddItem(item_1);
menu.AddItem(item_2);
menu.AddItem(item_3);
System.out.println("Tampilkan menu");
Iterator<Item> iterator = menu.iterator();
while(iterator.hasNext()){
Item item = iterator.next();
System.out.println(item);
}

System.out.println("Hapus menu paling akhir");
iterator.remove();
System.out.println("Tampilkan menu");
iterator = menu.iterator();
while(iterator.hasNext()){
Item item = iterator.next();
System.out.println(item);
}
}
}

class Item{
public Item(String nama_barang,int harga_barang) {
this.nama_barang = nama_barang;
this.harga_barang = harga_barang;
}
private String nama_barang;
private float harga_barang;

public String toString(){
return this.nama_barang+" : "+this.harga_barang;
}
}

class Menu{
ArrayList<Item> list;
public Menu() {
list = new ArrayList<Item>();
}
public void AddItem(Item item){
list.add(item);
}
public Iterator<Item> iterator(){
return new MenuIterator();
}
class MenuIterator implements Iterator<Item>{
int current_index = 0;
@Override
public boolean hasNext() {
if(current_index >=list.size()){
return false;
}else{
return true;
}
}
@Override
public Item next() {
return list.get(current_index++);
}
@Override
public void remove() {
list.remove(--current_index);
}
}
}


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

namespace Iterator_
{
class Program
{
public static void Main(string[] args)
{
Item item_1 = new Item("Hardisk",500);
Item item_2 = new Item("Memory",200);
Item item_3 = new Item("Processor",400);

Menu menu = new Menu();
menu.AddItem(item_1);
menu.AddItem(item_2);
menu.AddItem(item_3);

List<Item> list = menu.iterator();
Console.WriteLine("Tampilkan menu");
foreach(Item my_item in list){
Console.WriteLine(my_item.toString());
}

Console.WriteLine("Hapus menu paling akhir");
menu.RemoveItem();
Console.WriteLine("Tampilkan menu");
list = menu.iterator();
foreach(Item my_item in list){
Console.WriteLine(my_item.toString());
}
Console.ReadKey(true);
}
}

class Item{
public Item(string nama_barang,int harga_barang) {
this.nama_barang = nama_barang;
this.harga_barang = harga_barang;
}
private string nama_barang;
private float harga_barang;

public string toString(){
return this.nama_barang+" : "+this.harga_barang;
}
}

class Menu{
List<Item> list = new List<Item>();
public Menu() {
list = new List<Item>();
}
public void AddItem(Item item){
list.Add(item);
}
public void RemoveItem()
{
if(list.Count != 0){
list.RemoveAt((list.Count-1));
}
}

public List<Item> iterator(){
return this.list;
}
}
}


PHP
<?php
class Item{
function __construct($nama_barang,$harga_barang) {
$this->nama_barang = $nama_barang;
$this->harga_barang = $harga_barang;
}
private $nama_barang;
private $harga_barang;

function ToString(){
return $this->nama_barang." : ".$this->harga_barang.'< br />';
}
}

class Menu{
private $list = Array();
private $index = 0;
function AddItem($item){
$this->list[] = $item;
}

function RemoveItem(){
array_pop($this->list);
}

function GetSize(){
echo sizeof($this->list)-1;
}

function iterator(){
return $this->list;
}
}

$item_1 = new Item("Hardisk",500);
$item_2 = new Item("Memory",200);
$item_3 = new Item("Processor",400);

$menu = new Menu();
$menu->AddItem($item_1);
$menu->AddItem($item_2);
$menu->AddItem($item_3);

$list_menu = $menu->iterator();
echo("Tampilkan menu< br />");
foreach($list_menu as $list){
echo($list->ToString());
}

echo("Hapus menu paling akhir< br />");
$menu->RemoveItem();
echo("Tampilkan menu< br />");
$list_menu = $menu->iterator();
foreach($list_menu as $list){
echo($list->ToString());
}
?>
kalo ente perhatikan program diatas... pertama ane buat list produk nya kemudian ane tampilkan semua produk nya, setelah itu ane menghapus produk yang terakhir masuk.. tanpa harus mengakses list produk dari awal... begitu konsep kerja dari pattern iterator ini... paham ya ?? :D cukup dulu postingan kali ini... soalnya ane mau siap2 kuliah... nanti ane posting lagi insya Alloh kalo sempet masi tentang design pattern dan penerapannya di Java, C# dan PHP... semoga bermanfaat... keep cooding :)

Pattern Flyweight di Java, C# dan PHP

Pagi hari yang mendung :) tapi alhamdulillah masi sehat... masi tentang design pattern yang ane bahas, kali ini pattern Flyweight  yang kudu di action dan contoh nya di Java, C# dan PHP... kelas terbang... arti dari pattern ini... dan fungsinya seperti pattern lainnya, yaitu untuk penghematan memory... pattern ini hampir sama konsep kerjanya dengan factory method yaitu penggunaan object yang mirip dan juga memanfaatkan konsep singleton untuk penghematan memory... hanya saja pattern flyweight ini memnafaatkan list dlam mengakses factory object nya...
hemmb... ya.. kurang lebih begitulah konsepnya flyweight ini, pada contoh penerapannya ane akan melakukan sebuah operasi yang menggunakan konsep singleton dan factory yang object singleton akan mengakses operasi method yang berbeda. biar lebih jelas dan gak bingung langsung aje ke penerapan / implementasi nya di Java, C# dan PHP...


package FlyWeight;

import java.util.HashMap;
import java.util.Map;

public class MainClass {
public static void main(String[] args) {
FlyWeightFactory factory = FlyWeightFactory.GetInstance();

for(byte i = 0; i<5; i++){
FlyWeight penjumlahan = factory.GetFlyWeight("penjumlahan");
penjumlahan.DoIt(i, i);

FlyWeight perkalian = factory.GetFlyWeight("perkalian");
perkalian.DoIt(i, i);
}
}
}

interface FlyWeight{
public void DoIt(int a,int b);
}

class Penjumlahan implements FlyWeight{
public Penjumlahan() {
try{
operasi = "Penjumlahan";
}catch (Exception e) {
e.printStackTrace();
}
}
private String operasi;
@Override
public void DoIt(int a,int b) {
System.out.println(operasi+" dari "+a+" dan "+b+" adalah "+(a+b));
}
}

class Perkalian implements FlyWeight{
public Perkalian() {
try{
operasi = "Perkalian";
}catch (Exception e) {
e.printStackTrace();
}
}

private String operasi;

@Override
public void DoIt(int a, int b) {
System.out.println(operasi+" dari "+a+" dan "+b+" adalah "+(a*b));
}
}

class FlyWeightFactory{
private static FlyWeightFactory flyWeightFactory = null;
private Map<String, FlyWeight> flyWeightpool = null;
public FlyWeightFactory() {
flyWeightpool = new HashMap<String, FlyWeight>();
}
public static FlyWeightFactory GetInstance(){
if(flyWeightFactory == null){
flyWeightFactory = new FlyWeightFactory();
}
return flyWeightFactory;
}

public FlyWeight GetFlyWeight(String key){
if(flyWeightpool.containsKey(key)){
return flyWeightpool.get(key);
}else{
FlyWeight flyWeight;
if(key.equals("penjumlahan")){
flyWeight = new Penjumlahan();
}else{
flyWeight = new Perkalian();
}
flyWeightpool.put(key, flyWeight);
return flyWeight;
}
}
}


C#
using System;
using System.Threading;
using System.Collections;

namespace FlyWeight_1
{
class Program
{
public static void Main(string[] args)
{
FlyweightFactory factory = new FlyweightFactory();
for(byte i = 0; i<5; i++)
{
Flyweight penjumlahan = factory.GetFlyweight("penjumlahan");
penjumlahan.Operation(i,i);

Flyweight perkalian = factory.GetFlyweight("perkalian");
perkalian.Operation(i,i);
}

Console.ReadKey(true);
}
}

class FlyweightFactory
{
private Hashtable flyweights = new Hashtable();

public FlyweightFactory()
{
flyweights.Add("penjumlahan", new Penjumlahan());
flyweights.Add("perkalian", new Perkalian());
}

public Flyweight GetFlyweight(string key)
{
return ((Flyweight)flyweights[key]);
}
}

abstract class Flyweight
{
public abstract void Operation(int a,int b);
}

class Penjumlahan : Flyweight
{
public Penjumlahan()
{
try
{
operasi = "Penjumlahan";
}
catch(Exception e){
Console.WriteLine(e.Message);
}
}

private string operasi;

public override void Operation(int a,int b)
{
Console.WriteLine(operasi+" dari "+a+" dan "+b+" adalah "+(a+b));
}
}

class Perkalian : Flyweight
{
public Perkalian()
{
try
{
operasi = "Perkalian";
}
catch(Exception e){
Console.WriteLine(e.Message);
}
}

private string operasi;

public override void Operation(int a,int b)
{
Console.WriteLine(operasi+" dari "+a+" dan "+b+" adalah "+(a*b));
}
}
}


PHP
<?php
interface FlyWeight{
function Operasi($a,$b);
}

class Penjumlahan implements FlyWeight{
function __construct(){
$this->operasi = "Penjumlahan";
}
private $operasi;

function Operasi($a,$b){
echo $this->operasi." dari ".$a." dan ".$b." adalah ".($a+$b)."< br />";
}
}

class Perkalian implements FlyWeight{
function __construct(){
$this->operasi = "Perkalian";
}
private $operasi;

function Operasi($a,$b){
echo $this->operasi." dari ".$a." dan ".$b." adalah ".($a*$b)."< br />";
}
}

class FlyWeightFactory{
private $factory = array();
function __construct(){
$this->factory['penjumlahan'] = new Penjumlahan();
$this->factory['perkalian'] = new Perkalian();
}

function GetFlyweight($key){
return $this->factory[$key];
}
}

$flyWeightFactory = new FlyWeightFactory();

for($i = 0; $i<5; $i++){
$penjumlahan = $flyWeightFactory->GetFlyweight("penjumlahan");
$penjumlahan->Operasi($i,$i);

$perkalian = $flyWeightFactory->GetFlyweight("perkalian");
$perkalian->Operasi($i,$i);
}
?>
cukup mudah untuk menerapkan design pattern flyweight ini di Java, C# dan PHP... kalo ente belum paham, monggo tanya ke ane lewat facebook aje biar cepet :D.. cukup dulu untuk postingan ini, semoga bermanfaat...

Pattern Interpreter di Java, C# dan PHP

Tinggal 7 pattern yang harus ane upload di blog ini, habis itu akan lunas deh target ane buat selesaikan tutorial design pattern ini :D ... kali ini giliran pattern Interpreter yang ane bahas dan yang akan ane coba implementasinya di java, C# dan PHP... pattern interpreter ini termasuk kategori design pattern behaviour yang menangani kelakuan program... pattern ini konsep kerja nya seperti gaet yang menerjemahkan bahasa asing. artinya si gaet harus mengenali dan belajar dulu jenis2 bahasa asing agar bisa menerjemahkan..
dalam contoh yang setelah ini ane pake contoh sebuah object yang bisa mengoperasikan operasi matematika yang berbeda dalam suatu proses tetapi menggunakan inputan yang sama. oke.. begini penerapannya di Java, C# dan PHP

Java
package Interpreter;

import java.util.*;

public class MainClass {
public static void main(String[] args) {
Context context = new Context();
List<AbstractExpression> list = new ArrayList<AbstractExpression>();

list.add(new Penjumlahan());
list.add(new Perkalian());

for(AbstractExpression abs : list){
abs.DisplayText(context);
}
}
}

class Context{
public int bilangan_1 = 10;
public int bilangan_2 = 10;
}

abstract class AbstractExpression{
public abstract void DisplayText(Context context);
}

class Penjumlahan extends AbstractExpression{
@Override
public void DisplayText(Context context) {
System.out.println(context.bilangan_1+context.bilangan_2);
}
}

class Perkalian extends AbstractExpression{
@Override
public void DisplayText(Context context) {
System.out.println(context.bilangan_1*context.bilangan_2);
}
}

C#
using System;
using System.Collections;

namespace Interpreter
{
class Program
{
public static void Main(string[] args)
{
Context context = new Context();
ArrayList list = new ArrayList();

list.Add(new Penjumlahan());
list.Add(new Perkalian());

foreach(AbstractExpression abs in list){
abs.DisplayText(context);
}

Console.ReadKey(true);
}
}

class Context{
public int Bilangan_1 = 10;
public int Bilangan_2 = 10;
}

abstract class AbstractExpression{
public abstract void DisplayText(Context context);
}

class Penjumlahan : AbstractExpression{
public override void DisplayText(Context context)
{
Console.WriteLine(context.Bilangan_1+context.Bilangan_2);
}
}

class Perkalian : AbstractExpression{
public override void DisplayText(Context context)
{
Console.WriteLine(context.Bilangan_1*context.Bilangan_2);
}
}
}

PHP
<?php
class Context{
public $bilangan_1 = 10;
public $bilangan_2 = 10;
}

abstract class AbstractExpression{
abstract function DisplayText($context);
}

class Penjumlahan extends AbstractExpression{
function DisplayText($context) {
echo($context->bilangan_1+$context->bilangan_2."< br />");
}
}

class Perkalian extends AbstractExpression{
function DisplayText($context) {
echo($context->bilangan_1*$context->bilangan_2."< br />");
}
}

$context = new Context();
$list = Array();

$list[] = new Penjumlahan();
$list[] = new Perkalian();

foreach($list as $l){
$l->DisplayText($context);
}
?>

Kalo ente perhatikan.. abstract class "AbstractExpression" itu sebagai gaet yang bisa menerjemahkan 2 proses yaitu penjumlahan dan perkalian yang input nya dari class context :D , maka seperti itu konsep kerja pattern interpreter ini.. hehee.. paham ya ?? kalo gak paham silahkan tanyakan ke ane lewat facebook aje.. wkwkwkwk sekian dulu ya gan ? semoga bermanfaat..

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 :)

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.. :)

Selasa, 09 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 :)

Pattern Strategy di Java, C# dan PHP

design pattern yang ane bahas kali ini tentang strategy pattern yang termasuk kategory behaviour pattern yang menangani kelakuan program. dan seperti biasanya ane kasi penerapannya nanti di Java, C# dan PHP.. akhir2 ini ane jadi agak sedikit males nulis di blog kesayangan ini karena beberapa beban yang harus ane selesaikan dengan cepat dalam waktu yang sangat singkat :( . rasanya memang seperti tak punya hidup, memang tidak bisa mengatur sedikit waktu untuk bersantae si... dikarenakan ke padatan jadwal.. memang nasibnya programmer kali yak ? :(
untuk sedikit bermain saja sudah terasa banget waktu terbuang2.. hal ini sangat mengganggu ane sebenarnya... smoga besok2 ada kabar baik yang bisa membangkitkan kembali semangat ane untuk berkarya dengan cepat lagi. pengertian dari pattern strategy ini memungkinkan algoritma bervariasi secara independen dari client yang memanfaatkannya.. kali ini ane kasi contoh  kasus nya seperti validasi rentang tipe data dalam pemrograman... seperti yang ente tau, type data byte mempunyai rentang antara 0 - 255 sedangkan integer rentangnya mulai -2147483648 sampai  2147483647 ... disini kita bisa memakainya sebagai simulasi penerapan design pattern strategy untuk menvalidasi sebuah bilangan, berikut penerapannya di Java, C# dan PHP

Java
package Strategi;

public class MainClass {
public static void main(String[] args) {
int nomer = 400;
System.out.println("Input Angka = "+nomer);
Context context = new Context(new VirtualByte(), nomer);
System.out.println(context.GetResult());
context = new Context(new VirtualInteger(), nomer);
System.out.println(context.GetResult());
}
}

interface Strategi{
String CekNomer(int angka);
}

class VirtualByte implements Strategi{
@Override
public String CekNomer(int angka) {
if(angka >= 0 && angka <= 255){
return "Angka Sesuai dengan Type Data Byte";
}else{
return "Angka diluar Rentang Type Data Byte";
}
}
}

class VirtualInteger implements Strategi{
@Override
public String CekNomer(int angka) {
if(angka >= -2147483648 && angka <= 2147483647){
return "Angka Sesuai dengan Type Data Integer";
}else{
return "Angka diluar Rentang Type Data Integer";
}
}
}

class Context{
private Strategi strategi = null;
private int nomer;
public Context(Strategi strategi,int nomer) {
this.strategi = strategi;
this.nomer = nomer;
}
public void SetStrategy(Strategi strategy){
this.strategi = strategy;
}
public int GetNomer(){
return this.nomer;
}
public String GetResult(){
return this.strategi.CekNomer(this.nomer);
}
}

C#
using System;

namespace Strategy
{
class Program
{
public static void Main(string[] args)
{
int nomer = 400;
Console.WriteLine("Input Angka = "+nomer);
Context context = new Context(new VirtualByte(), nomer);
Console.WriteLine(context.GetResult());
context = new Context(new VirtualInteger(), nomer);
Console.WriteLine(context.GetResult());


Console.ReadKey(true);
}
}

interface Strategi{
string CekNomer(int angka);
}

class VirtualByte : Strategi{
public string CekNomer(int angka) {
if(angka >= 0 && angka <= 255){
return "Angka Sesuai dengan Type Data Byte";
}else{
return "Angka diluar Rentang Type Data Byte";
}
}
}

class VirtualInteger : Strategi{
public string CekNomer(int angka) {
if(angka >= -2147483648 && angka <= 2147483647){
return "Angka Sesuai dengan Type Data Integer";
}else{
return "Angka diluar Rentang Type Data Integer";
}
}
}

class Context{
private Strategi strategi = null;
private int nomer;
public Context(Strategi strategi,int nomer) {
this.strategi = strategi;
this.nomer = nomer;
}
public void SetStrategy(Strategi strategy){
this.strategi = strategy;
}
public int GetNomer(){
return this.nomer;
}
public string GetResult(){
return this.strategi.CekNomer(this.nomer);
}
}
}

PHP
<?php
interface Strategi{
function CekNomer($angka);
}

class VirtualByte implements Strategi{
function CekNomer($angka) {
if($angka >= 0 && $angka <= 255){
return "Angka Sesuai dengan Type Data Byte< br />";
}else{
return "Angka diluar Rentang Type Data Byte< br />";
}
}
}

class VirtualInteger implements Strategi{
function CekNomer($angka) {
if($angka >= -2147483648 && $angka <= 2147483647){
return "Angka Sesuai dengan Type Data Integer<br />";
}else{
return "Angka diluar Rentang Type Data Integer<br />";
}
}
}

class Context{
private $strategi = null;
private $nomer;
function __construct($strategi,$nomer) {
$this->strategi = $strategi;
$this->nomer = $nomer;
}
function SetStrategy($strategy){
$this->strategi = $strategy;
}
function GetNomer(){
return $this->nomer;
}
function GetResult(){
return $this->strategi->CekNomer($this->nomer);
}
}

$nomer = 400;
echo("Input Angka = ".$nomer."< br />");
$context = new Context(new VirtualByte(), $nomer);
echo($context->GetResult());
$context = new Context(new VirtualInteger(), $nomer);
echo($context->GetResult());
?>

begitulah gan penerapan design pattern strategy di Java, C# dan PHP :D ... semoga bermanfaat buat kita semua.. :)