Design Pattern : Composite

Posted on

Composite Analogy

Masih dengan topik tentang Design Pattern. Kali ini saya akan membahas tentang Design Pattern yang termasuk dalam Structural Pattern. Postingan sebelumnya telah membahas tentang Decorator Pattern. Composite Pattern digunakan untuk merepresentasikan sebuah hirarki objek sehingga dapat sebuah objek dapat menjadi komposisi bagi objek yang lain. Misalnya dianalogikan seperti ini, kita akan menggambar sebuah objek manusia. Objek manusia tersebut terdiri dari objek-objek dasar seperti garis, kotak, lingkaran, segitiga dan bentuk lainnya. Beberapa bentuk badan seperti mata dan kepala merupaka representasi dari objek dasar lingkaran.  Saat diimplementasikan, apabila kita tidak menggunakan composite pattern, kita harus mendefinisikan mata dan kepala menjadi sebuah class tersendiri. Yang menjadi masalah apabila ada banyak bentuk badan yang memiliki bentuk objek dasar yang sama. Ini berarti kita harus mendefinisikannya satu per satu. Saat program dikembangkan menjadi lebih komplek, kita akan semakin kewalahan dalam melakukan manajemen objek-objek tersebut. Dengan Composite Pattern, permasalahan ini dapat diselesaikan. Cara pendekatannya adalah dengan melakukan recursive composition sehingga memungkinkan sebuah objek dapat memanggil objek yang lain untuk dijadikan komposisinya.

Masih bingung? Mari kita perhatikan gambaran class diagram dari permasalahan pembentukan objek yang dibangun dari objek garis, kotak, dan text.

Composite Structure Example
Composite Structure Example

Kunci dari Composite Pattern adalah sebuah abstract class yang merepresentasikan objek-objek primitive yang ada dan objek picture yang merupakan gabungan dari objek-objek primitive tersebut. Abstract class Graphic memiliki method yang bernama Draw, Add, Remove, dan GetChild yang nantinya akan diturunkan ke child-childnya. Class lain seperti Line, Rectangle, dan Text merepresentasikan objek primitive. Sedangkan objek Picture merepresentasikan container yang dapat membangun objek baru dari gabungan objek-objek primitive. Objek Picture mengagregasi objek Graphic yang notabene adalah abstrak dari seluruh objek. Ini memberi keuntungan bagi objek Picture apabila ingin membangun objek dengan komposisi yang berbeda-beda. Inilah yang disebut Composite Pattern. Relasi antar objek seperti ini mengakibatkan struktur objek yang bersifat rekursive, yang digambarkan menjadi sebagai berikut.

Composite recursive effect

Composite pattern digunakan dalam kondisi sebagai berikut :

  • You want to represent part-whole hierarchies of objects.
  • You want clients to be able to ignore the difference between compositions of objects and individual objects. Clients will treat all objects in the composite structure uniformly.

Composite pattern dapat digunakan pada berbagai situasi dan kasus. Class diagram dasarnya kira-kira sebagai berikut.

Composite Class Diagram
Composite Class Diagram

Dari class diagram di atas, memungkinkan terbentuk struktur composite di mana objek dapat memiliki child dari objek-objek yang lain.

Composite Structure
Composite Structure

Dari class diagram, dapat dilihat terdapat beberapa bagian-bagian yang salin terkait satu sama lain, antara lain :

Component (Graphic)

Bagian ini merepresentasikan interface dari objek-objek yang lain. Class abstrak Component memuat method-method yang akan direalisasikan oleh objek lain. Class abstrak ini nantinya akan diagregasi oleh objek lain sehingga membentuk struktur rekursif yang dinamis

Leaf (Rectangle, Line, Text, etc)

Bagian ini merupakan child class yang merepresentasikan objek primitif. Class Leaf tidak memiliki child, class ini nantinya menjadi komposisi dari class Composite.

Composite (Picture)

Bagian ini merepresentasikan sebuah objek yang dibangun oleh beberapa objek Leaf. Objek ini mengagregasikan class Component yang kemudian diisi oleh objek-objek Leaf yang sebelumnya sudah dideklarasikan.

Client

Bagian yang akan mengakses struktur composite, dengan melewati class abstrak Component terlebih dahulu.

Dengan menggunakan struktur Composite, didapatkan konsekuensi baik keuntungan maupun kerugian sebagai berikut :

  1. Dengan Composite Pattern, class primitive yang sebelumnya sudah dideklarasikan dapat diubah menjadi class Composite yang memuat class lain untuk membentuk struktur yang lebih kompleks.
  2. Memudahkan Client dalam memanipulasi sebuah objek dengan mudah. Ini dikarenakan sebuah objek composite dapat dibangun dengan komposisi objek yang beragam.

Sebagai contoh, diberikan kasus permasalahan tentang pembuatan sebuah tool yang digunakan untuk menggambar sebuah objek picture pada canvas. Objek yang dapat digambar beragam, di mana terdiri dari gabungan objek garis, teks, dan lingkaran.

Jika tidak menggunakan Composite Pattern, implementasi dilakukan dengan cara mendefinisikan masing-masing objek dengan class yang berbeda-beda. Nah, jika menggunakan Composite Pattern, kita cukup melakukan instance dari objek dasar. Berdasarkan konsep Composite Pattern, class diagram yang terbentuk adalah sebagai berikut.

Composite Class Diagram Contoh Kasus
Composite Class Diagram Contoh Kasus

Project lengkap contoh implementasi Composite Pattern dapat didownload di https://copy.com/FNY4KhJysfxJ. Semoga bermanfaat 🙂

Iklan

One thought on “Design Pattern : Composite

    Aldy Ahsandin said:
    14 Oktober 2013 pukul 06:11

    Sip dli

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s