The Importance of Sharing


Sudah lama sekali saya tidak menulis di blog ini. Mungkin karena padatnya aktivitas saya saat ini, karena saya lagi menempuh Tugas Akhir. Tulisan saya kali ini ingin membahas mengenai salah satu Design Pattern yang ada dalam dunia pemrograman. Tapi sebelum itu, saya mulai dulu dengan apa itu Design Pattern ?

Design Pattern pertama kali diperkenalkan Gang of Four yang terdiri dari Erich Gamma, Richard Helm, Ralph Johnson, dan John Vlissides dalam bukunya yang berjudul Design Pattern : Elements of Reusable Object – Oriented Software pada tahun 1995. Buku tersebut menjelaskan bahwa design pattern merupakan sekumpulan solusi – solusi umum yang sering digunakan oleh para ahli desainer object – oriented software. Design pattern muncul berdasarkan pengalaman mereka yang sering menghadapi masalah yang sama dengan penyelesaian yang sama secara berulang – ulang. Nah solusi – solusi yang sering muncul inilah dirangkum oleh GoF  (Gang of Four) kedalam buku tersebut dan dinamakan design pattern. Dengan design pattern kita juga bisa berkomunikasi lebih mudah dengan programmer lain, cukup dengan mengatakan nama patternnya maka kita sudah paham desain apa yang dimaksud. Mirip dengan kalau kita berada di warteg cukup dengan mengatakan “Nasi Campur” maka pedagangnya sudah paham apa saja bahan dan isi yang ada dalam nasi campur tersebut. Kemudian design pattern tidak sama dengan algoritma, karena design pattern lebih mengarah ke solusi bukan implementasi seperti algoritma.

Dalam buku tersebut terdapat 3 jenis pattern yang terdiri dari :

  1. Creational Pattern
    1. Abstract Factory
    2. Builder
    3. Factory Method
    4. Prototype
    5. Singleton
  2. Structural Pattern
    1. Adapter
    2. Bridge
    3. Composite
    4. Decorator
    5. Facade
    6. Flyweight
    7. Proxy
  3. Behavioral Pattern
    1. Chain of Responsibility
    2. Command
    3. Interpreter
    4. Iterator
    5. Mediator
    6. Memento
    7. Observer
    8. State
    9. Strategy
    10. Template Method
    11. Visitor

Dari  sekian banyak design pattern tersebut untuk newbie seperti saya, kita  bisa mulai belajar dari pattern yang paling sederhana dan yang paling sering digunakan. Menurut GoF pattern tersebut adalah :

  1. Abstract Factory
  2. Factory Method
  3. Adapter
  4. Composite
  5. Decorator
  6. Observer
  7. Strategy
  8. Template Method

Saya mulai dulu dengan Strategy Pattern ya, Strategy Pattern pattern memiliki nama lain yaitu Policy Pattern. Menurut GoF, Staretegy Pattern yaitu :

Define a family of algorithms, encapsulate each one, and make them interchangeable.

Strategy lets the algorthm vary independently from client that use it.

Jadi strategy pattern digunakan untuk mengelompokkan sejumlah algoritma, mengenskapsulasinya menjadi sebuah objek, dimana nantinya kita bisa mempertukarkan objek tersebut. Hal ini berarti kita dapat merubah atau mempertukarkan algoritma tersebut secara dinamis pada saat aplikasi sedang berjalan. Strategy pattern sangat membantu dalam memelihara kode program, karena ketika kita memiliki banyak algoritma maka aplikasi akan semakin kompleks dan tentu saja akan sangat sulit memelihara kode program kita. Lagi pula dengan mengenkapsulasi algoritma mejadi sebuah kelas, kita bisa menggunakan algoritma tersebut kapan pun bila dibutuhkan.

Struktur strategy pattern digambarkan menggunakan UML adalah sebagai Berikut.

Bayangkan kita memiliki banyak cara (algoritma) untuk menyelesaikan suatu masalah yang kompleks dimana tidak semua cara bisa digunakan, namun lebih cenderung bergantung kondisi pada saat aplikasi sudah berjalan (Runtime). Jadi pada saat runtime tidak semua cara bisa digunakan mungkin hanya satu atau dua saja dari sekian banyak cara yang kita miliki. Nah untuk lebih mudahnya saya sertakan contoh sederhana penggunaan strategy pattern. Contoh ini diadaptasi dari buku Head First Design Pattern.

Berikut adalah implementasi sederhana strategy pattern yang telah saya buat dalam bentuk UML

Interface senjata dan beberapa kelas implementasinya merupakan sekumpulan algoritma yang nantinya bisa digunakan oleh karakter seperti kelas Raja dan kelas Prajurit. Kita bisa merubah behavior pada kelas Raja dan prajurit secara dinamis pada saat runtime, karena saya telah menyediakan method

setSenjata(Senjata senjata).

Jadi kita bisa mengganti atau mempertukarkan senjata yang digunakan baik oleh Raja maupun Prajurit. Untuk lebih jelasnya implementasi berupa source code daripada contoh tersebut dapat diambil disini.

kapan kita menggunakan strategy pattern ? Kita bisa menggunakan strategy pattern bila mengalami kondisi sebagai berikut :

  1. Jika terdapat kelas yang saling berhubungan dan hanya dibedakan oleh behaviornya saja. Pada contoh diatas kelas Raja dan Prajurit memiliki keterkaitan karena memiliki kemiripan sifat. Namun yang membedakan adalah behaviornya saja, misalnya Raja menggunakan senjata Kapak dan Prajurit menggunakan senjata pedang.
  2. Kita memiliki banyak algoritma yang harus diimplementasikan.
  3. Kita ingin algoritma tersebut tidak tercampur dengan kode client.
  4. Adanya sebuah kelas yang mendefinisikan banyak behavior dan behavior ini muncul karena adanya beberapa syarat yang harus dipenuhi. Misalnya saja jika pedang prajurit patah maka ia akan menggantinya dengan pisau.

Semoga Bermanfaat.

Referensi :

  1. Design Pattern : Elements of Reusable Object – Oriented Software
  2. Head First Design Pattern
  3. Wikipedia

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: