Pengertian dan Contoh Membuat Java Flyweight Pattern

 





Flyweight pattern adalah design pattern yang digunakan untuk mengurangi atau meminimalisir jumlah pembuatan objek, mengurangi penggunaan memory sehingga dapat memaksimalkan performa aplikasi. Pattern ini dibuat tidak lain dan tidak bukan untuk memangkas si memori supaya tidak membengkak. Pattern ini termasuk ke dalam Structural Pattern.

Intinya pattern akan mencoba untuk menggunakan kembali objek sejenis yang sudah ada sebelumnya dengan menyimpannya dan menciptakan objek baru bila tidak ada objek yang cocok. Untuk menerapkan flyweight pattern, kita juga perlu membuat flywightFactory.

Dibawah adalah contoh penggunaan flyweight pattern dimana dalam contoh berikut kita dituntuk membuat objek kopi untuk dibagikan ke 10 meja pelanggan dengan jenis kopi yang dipasan adalah : tiga kopi cappuccino untuk meja 2 dan 9, lima Kopi Susu untuk meja 1,3,5,6, dan 8, dan dua kopi Luwak untuk meja 4 dan 7.

Nah, jika kita buat perogramnya seperti biasa mungkin kita perlu membuat sepuluh objek kopi untuk sepuluh meja pelanggan tadi. Tetapi, dengan Flyweight pattern kita tidak perlu melakukan hal seperti itu, hal tadi bisa membuat program jadi boros memori. Kita hanya perlu membuat objek jenis kopi nya saja. Dari contoh diatas ada tiga jenis kopi yang dipesan pelanggan, jadi kita hanya perlu membuat tiga objek kopi yang nantinya flywieight patten akan mengatur semuanya sehingga hanya dengan tiga objek terebut ke sepuluh meja pelanggan dapat terpenuhi. Dan dengan hanya menggunakan tiga objek maka penggunaan memori program pun dan di minimalisir. Intinya jika programnya dibuat denga cara yang biasa, maka kita perlu membuat sepuluh objek kopi. Tetapi, jika menggunakan flyweight pattern maka hanya perlu membuat tiga objek saja.

Berikut adalah contoh perogram flyweight pattern tersebut :

Note : Bagi pengguna mobile, mohon aktifkan JavaScript dan matikan fitur Google Web Light untuk melihat kode berikut secara keseluruhan.



  1. Buat interface ICoffee.java

package main;

public interface ICoffee {
    
    public void serveCoffee(CoffeeContext context);
}


  2. Buat class CoffeeContext.java

package main;

public class CoffeeContext {
    
    private final int tableNumber;
    
    public CoffeeContext(int tableNumber){
        this.tableNumber = tableNumber;
    }
    
    public int getTable() {
        return this.tableNumber;
    }
}



  3. Buat Coffee.java implements ke ICoffee.java

package main;

public class Coffee implements ICoffee{
    
    private final String flavor;
    
    public Coffee(String newFlavor){
        this.flavor = newFlavor;
        System.out.println("Kopi yang dibuat : "+flavor);
    }
    
    public String getFlavor(){
        return this.flavor;
    }

    @Override
    public void serveCoffee(CoffeeContext context) {
        System.out.println("Porsi "+flavor+" untuk meja "+context.getTable());
    }
    
}


  4. Buat class CoffeeFactory.java

package main;

import java.util.HashMap;

public class CoffeeFactory {
    
    private HashMap < String, Coffee > flavors = new HashMap < >();
    
    public Coffee getCoffeeFlavor(String flavorName){
        
        Coffee flavor = flavors.get(flavorName);
        
        if(flavor == null) {
            flavor = new Coffee(flavorName);
            flavors.put(flavorName, flavor);
        }
        return flavor;
    }
    
    public int getTotalCoffeeFlavorMade() {
        return flavors.size();
    }
}



  5. Buat class Main.java

package main;

public class Main {
    
    // Kopi array
    public static Coffee[] kopi = new Coffee[20];
    
    // Tabel Array
    public static CoffeeContext[] tabel = new CoffeeContext[20];
    private static int ordersCount = 0;
    private static CoffeeFactory coffeeFactory;
    
    public static void takeOrder(String flavorIn, int table){
        
        kopi[ordersCount] = coffeeFactory.getCoffeeFlavor(flavorIn);
        tabel[ordersCount] = new CoffeeContext(table);
        ordersCount++;
        
    }
    
    public static void main(String[] args){
        
        coffeeFactory = new CoffeeFactory();
        takeOrder("Cappuccino",2);
        takeOrder("Cappuccino",2);
        takeOrder("Kopi Susu",1);
        takeOrder("Kopi Susu",3);
        takeOrder("Kopi Luwak",4);
        takeOrder("Kopi Susu",5);
        takeOrder("Kopi Susu",6);
        takeOrder("Kopi Luwak",7);
        takeOrder("Kopi Susu",8);
        takeOrder("Cappuccino",9);
        
        for(int i = 0; i < ordersCount; i++){
            kopi[i].serveCoffee(tabel[i]);
        }
        
        System.out.println("\n Total kopi yang dibuat : "+ coffeeFactory.getTotalCoffeeFlavorMade());
    }
    
    
}



  6. Verifikasi Output

Kopi yang dibuat : Cappuccino
Kopi yang dibuat : Kopi Susu
Kopi yang dibuat : Kopi Luwak
Porsi Cappuccino untuk meja 2
Porsi Cappuccino untuk meja 2
Porsi Kopi Susu untuk meja 1
Porsi Kopi Susu untuk meja 3
Porsi Kopi Luwak untuk meja 4
Porsi Kopi Susu untuk meja 5
Porsi Kopi Susu untuk meja 6
Porsi Kopi Luwak untuk meja 7
Porsi Kopi Susu untuk meja 8
Porsi Cappuccino untuk meja 9




Baca Juga : 
 Java Proxy Pattern


Entri Sebelumnya :
  Java Facade Pattern


Pengertian dan Contoh Membuat Java Flyweight Pattern 4.5 5 Ardyn Sulaeman Flyweight pattern adalah design pattern yang digunakan untuk mengurangi atau meminimalisir jumlah pembuatan objek, mengurangi penggun...


No comments:

Post a Comment

Powered by Blogger.