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